C++ 左值和右值,左值引用和右值引用

區分左值右值的真正說法是:能否用“取地址&”運算符獲得對象的內存地址。

臨時對象是右值,可以被右值引用或者常量左值引用來引用;

持久對象是左值,可以被左值引用或常量左值引用來引用;

對於臨時對象,它可以存儲於寄存器中,所以是沒辦法用“取地址&”運算符;
對於常量,它可能被編碼到機器指令的“立即數”中,所以是沒辦法用“取地址&”運算符;

字符串字面值常量是C++標準中明確指明的特例,爲常量左值,所以可以取地址&運算,其地址屬於進程的只讀內存空間。其它的字面值常量都是“純右值”。

也就是說:

&5 ; //非法. 5爲常量右值

&("hello") ; // 合法,"hello" 爲常量左值


發佈了84 篇原創文章 · 獲贊 145 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章