簡體   English   中英

為什么C ++右值不是不可變的

[英]why c++ rvalue is not immutable

碼:

void test(int&& a)
{
    a++;
    std::cout << a << std::endl;
}

並執行:

test(0);

為什么輸出1? 原因我認為0是右值,因此無法更改。

如果將非類,非數組prvalue(例如數字文字)綁定到引用,則該引用實際上將綁定到臨時變量 ,該臨時變量是原始值的副本。 那是,

int&& a = 0;

創建一個值為零的臨時int對象,然后將a綁定到該對象。

當您調用test(0) ,將應用相同的規則,並將引用參數綁定到臨時參數; 臨時變量會增加,您會得到結果1。當然,您本身並不會增加0。

指向const的右值引用和左值引用都可以綁定到臨時目錄。 區別在於,前者是可修改的,后者不是。

int& i = 0; // invalid
const int& i = 0; // valid
++i; // invalid
int&& i = 0; //valid
++i; // valid;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM