」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 您可以分配給C ++類類型的RVALUE嗎?

您可以分配給C ++類類型的RVALUE嗎?

發佈於2025-03-24
瀏覽:105

 Can You Assign to an Rvalue of Class Type in C  ? 
在c編程語言中,rvalues(rvalues(右手值))中,分配給類類型rvalues

通常無法用作lvalues(左手值)。但是,此規則有例外,如以下代碼所示:

令人驚訝的是,即使構造函數y(1)返回的對像是rvalue,該代碼也成功地編譯了。本文探討了這種意外行為背後的原因。

分配給類型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));

正如我們已經建立的那樣,合成的分配運算符=類Y是y是非const成員的功能,這意味著它可以應用於RVAlue。 Therefore, the compiler can interpret the assignment statement as an assignment to the temporary object created by the constructor Y(1).

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