[英]Can assignment operator be overloaded to return the value of a property of a class?
[英]Why does overloaded assignment operator return reference to class?
class item {
public:
item& operator=(const item &rh) {
...
...
return *this;
}
};
以下簽名是錯誤的嗎?
void operator=(const item &rh);
item a, b;
a = b; // equivalent to a.operator=(b); so there is no need to return this.
這不是“錯誤的”,而是令人驚訝的。 賦值評估目標對象。 這就是內置意義。 如果你為自己的班級定義不同,人們可能會感到困惑。
例:
int c;
while((c = getchar()) != EOF) {
// ...
}
對c
的賦值返回c
本身,然后將其與EOF
進行比較。 用戶希望您的item
類行為相似。
帶有void的簽名不允許鏈接賦值:
a = b = c;
(請查看Johannes關於基於返回指定值的賦值的使用模式的另一個示例的答案。)
這就是為什么不鼓勵使用這種簽名的原因。 但是,如果我沒有弄錯,你實際上可以使用這樣的簽名。
這完全合法。 但是當你聲明operator=
類的時候,你將無法進行“賦值鏈”:
item a(X);
item b;
item c;
c = b = a;
引用允許修改返回值。 由於operator=
從右到左進行評估,因此我向您展示的用法正在運行。
編輯此外,正如其他人所提到的,返回值通常用於像while (a = cin.get()) != 'q')
這樣的表達式中。 但是你也可以聲明運算符如A operator=(const A&)
(返回copy)或const A& operator(const A&)
(返回const引用)。 我的觀點是:這個操作符可以返回任何內容 ,但慣用的方法是返回非const引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.