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

时间:2010-05-14 05:51:27

标签: c++ operator-overloading

在c ++中我有以下代码

class Foobar{
public:
  Foobar * operator()(){
      return new Foobar;
 };

我的问题是如何调用(); 如果我做Foobar foo(),构造函数会被调用 我对()的行为感到困惑 可以解释一下我

2 个答案:

答案 0 :(得分:5)

像这样:

Foobar f;
Foobar* p = f(); // f() invokes operator()
delete p;

这也很奇怪,就像返回这样的指针而言,它是一个相当无用的功能。 (我“需要”一个Foobar来创建一个新的吗?)

答案 1 :(得分:5)

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

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