如何在c ++中调用operator()

ani*_*ish 0 c++ operator-overloading

在c ++我有以下代码

class Foobar{
public:
  Foobar * operator()(){
      return new Foobar;
 };
Run Code Online (Sandbox Code Playgroud)

我的问题是如何调用(); 如果我做Foobar foo()构造函数被调用我很困惑()的行为可以解释我

GMa*_*ckG 5

像这样:

Foobar f;
Foobar* p = f(); // f() invokes operator()
delete p;
Run Code Online (Sandbox Code Playgroud)

这也很奇怪,就像返回这样的指针而言,它是一个相当无用的函数.(我"需要" Foobar一个新的?)

  • 我会添加你*不应该这样做的资格*.从`operator()`返回一个`new`实例真是奇怪而且非惯用! (8认同)

Eli*_*sky 5

虽然GMan的回答在事实上是正确的,但你不应该让操作员超负荷做出意想不到的事情 - 这违背了所有良好实践的编程规则.当用户阅读代码时,他希望运算符以某种方式运行,并使它们表现不同,这对于混淆编码竞争是有益的.

()C++中的运算符可用于使对象表示函数.这实际上有一个名称 - 它被称为仿函数,并在STL中广泛使用以提供通用算法.Google for stl functor可以了解该技术的良好用法.