2011-09-09 50 views

回答

10

這不是 「錯誤」,但令人驚訝的。賦值評估爲目標對象。這就是內建的含義。如果你爲自己的班級定義它,人們可能會感到困惑。

例子:

int c; 
while((c = getchar()) != EOF) { 
    // ... 
} 

分配給c返回c本身比起來EOF之後。用戶期望您的item類的行爲類似。

5

與無效簽名不允許鏈接的任務:

a = b = c; 

(看約翰的回答基於任務返回指定值的使用模式的一個例子)

這就是爲什麼不鼓勵使用這種簽名。不過,如果我沒有弄錯,你實際上可以使用這樣的簽名。

+0

關鍵是這是什麼內置的類型 –

2

這是完全合法的。但是,當你聲明operator=這樣,您將無法進行「分配鏈」:

item a(X); 
item b; 
item c; 
c = b = a; 

參考允許修改返回值。由於operator=是從右向左評估的,因此我向您展示的用法正在起作用。

編輯另外,正如其他人提到的,返回值通常用於像while (a = cin.get()) != 'q')這樣的表達式中。但您也可以聲明運算符如A operator=(const A&)(返回副本)或const A& operator(const A&)(返回const引用)。我的觀點是:這個運營商可以返回任何東西,但慣用的方式是返回非const引用本身。

+1

不僅如此,聲明'operator ='返回'void',你將無法使用任何表達式的賦值結果。 –

相關問題