在c編程語言中,rvalues(rvalues(右手值))中,分配給類類型rvalues
理解為什麼此代碼有效的關鍵在於合成成員函數的概念。對於不明確定義分配運算符的類,編譯器會生成默認的分配運算符。該默認操作員是一個成員函數,它引用與其參數同一類的對象。
class Y {
public:
explicit Y(size_t num = 0) {}
};
int main() {
Y(1) = Y(0); // WHAT?!?
return 0;
}
使用返回rvalue的構造函數創建一個對象,返回rvalue,compiler會在內存中生成臨時對象。在創建其陳述的結尾,該臨時對象會自動破壞。但是,在構造函數返回類類型的rvalue的情況下,合成的分配操作員可以延長臨時對象的壽命。是以下代碼的句法糖:
y(1).operator =(y(0));Conclusion
Contrary to what is typically expected, it is possible to assign to an rvalue of class type in C because the compiler synthesizes non-const assignment operators for classes without an explicitly defined assignment operator.這些合成的分配運算符延長了由構造函數創建的臨時對象的壽命,從而允許分配到rvalues。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3