在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