參考http://en.cppreference.com/w/cpp/language/as_operator的頁面,複製賦值運算符(在編譯器需要時並且可能的時候自動生成)將返回自身類型的左值引用。對於重載操作符=返回無效是否是複製操作符?
所以,當我定義一個重載的操作如下,
void operator=(T& t)
是否還有機會編譯器將隱式地定義一個默認的拷貝賦值運算符?
參考http://en.cppreference.com/w/cpp/language/as_operator的頁面,複製賦值運算符(在編譯器需要時並且可能的時候自動生成)將返回自身類型的左值引用。對於重載操作符=返回無效是否是複製操作符?
所以,當我定義一個重載的操作如下,
void operator=(T& t)
是否還有機會編譯器將隱式地定義一個默認的拷貝賦值運算符?
這是一個拷貝賦值運算符,如語言標準所規定的,在C++ 11 [class.copy]/17:
甲用戶聲明的複製賦值運算符
X::operator=
是X
類的非靜態的非模板成員函數X
類型,X&
,const X&
,volatile X&
的正好一個參數或const volatile X&
。
返回類型不影響它是否被認爲是複製賦值操作符。它隻影響你可以用賦值表達式的結果做什麼。
所以,沒有(標題)和是(正文)。 –
C++ Reference(當你發現自己)聲明:
如果提供了一個類類型(結構,類或聯合)沒有用戶定義的複製賦值運算符,編譯器將始終聲明一個作爲該班級的內聯公共成員。
和
類T的拷貝賦值運算符是與該名操作者的非模板非靜態成員函數=在於採用類型T,T &,常量Ť&的正好一個參數,揮發性牛逼&或const volatile牛逼&
所以,換句話說:只要你聲明自己的拷貝賦值運算符(這需要一件T &參數),編譯器不會添加隱式的。
總還是有問題,爲什麼返回void但是...(C++編碼規範建議返回引用自己)
返回類型不被認爲是函數簽名的一部分,所以我期望不是 – EdChum
爲什麼你會使返回無效?如果你這樣做,你不能做像'foo a = b = c = d = some_val;' – NathanOliver
@NathanOliver:那會是件壞事? –