在C++中我有以下代码如何调用在C++运算符()
class Foobar{
public:
Foobar * operator()(){
return new Foobar;
};
我quesion是如何调用(); 如果我做的Foobar FOO()构造函数被调用 我感到困惑的行为() 可一些解释我
在C++中我有以下代码如何调用在C++运算符()
class Foobar{
public:
Foobar * operator()(){
return new Foobar;
};
我quesion是如何调用(); 如果我做的Foobar FOO()构造函数被调用 我感到困惑的行为() 可一些解释我
虽然GMAN的回答是真实,正确,你永远不应该重载运营商做一些意想不到的 - 这就违背了所有的好做法编程规则。当用户阅读代码时,他希望操作员以某种方式表现行为,并使其行为不同,仅适用于混淆编码竞争。
C++中的()
运算符可用于使对象表示函数。这实际上有一个名称 - 它被称为仿函数,并广泛用于STL中以提供通用算法。谷歌stl函子了解这项技术的良好用法。
像这样:
Foobar f;
Foobar* p = f(); // f() invokes operator()
delete p;
而且这是很奇怪的,在返回像这样的指针的条件,它是一个相当无用的函数。 (我“需要”一个Foobar
做出一个新的)
我会添加你*不应该这样做的限定*。从'operator()'返回一个'new'实例真的很奇怪,并且是非惯用的! – 2010-05-14 05:54:32
这不是'operator()'唯一常见的用法。它也用于链接。 'boost :: program_options'通过'options_description_easy_init :: operator()()'演示了一个很好的例子(但客户端只处理'options_description :: add_option()',它返回可链接类型)。您可以使用它来为一个接一个的命令行选项添加支持。为了同样的目的,使用'operator <<'和'operator >>'也很常见。 'std :: cout'和'std :: cin'就是这里的典型例子。这三者之间的选择通常是美学的选择。 – wilhelmtell 2010-05-14 06:16:23
尽管你对一般操作符肯定是正确的(不要重复'+'来完成'* ='的工作),但对我来说,似乎'operator()()'是个例外。它的用途是模仿一个函数,函数被用来做任何事情,所以对'operator()()'的用法没有限制。尽管你的头像很好,但是这使得我的-1。 ':)' – sbi 2010-05-14 07:09:37