[英]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.