在c ++中我有以下代码
class Foobar{
public:
Foobar * operator()(){
return new Foobar;
};
我的问题是如何调用(); 如果我做Foobar foo(),构造函数会被调用 我对()的行为感到困惑 可以解释一下我
答案 0 :(得分:5)
像这样:
Foobar f;
Foobar* p = f(); // f() invokes operator()
delete p;
这也很奇怪,就像返回这样的指针而言,它是一个相当无用的功能。 (我“需要”一个Foobar
来创建一个新的吗?)
答案 1 :(得分:5)
虽然GMan的答案事实上是正确的,你永远不应该让操作员超负荷做一些意想不到的事情 - 这违背了所有良好实践的编程规则。当用户阅读代码时,他希望运算符以某种方式运行,并使它们的行为不同只对混淆编码竞争有利。
C ++中的()
运算符可用于使对象表示函数。这实际上有一个名称 - 它被称为 functor ,并在STL中广泛使用以提供通用算法。谷歌为 stl functor 了解该技术的良好用法。