無聊的細節 指標 引用 右值

2021-06-03 00:38:04 字數 619 閱讀 7672

先看**:

int i;

int*& ii = &i;

我想定義乙個int*的引用ii。但是上面的**不能編譯,因為&i是個右值,不能被引用(只能引用左值嘛),只好加上const:

int i;

int*& ii = &i;

int* const &ii = &i;

ok了,const只能放在這裡,下面的**不能編譯(為什麼?):

int i;

const int*& ii = &i; //錯誤

int i;

int*& const ii = &i; //錯誤

不過話說來,實際中還是少出現這中蛋疼的細節,用更清晰的方式表達:

int i;

int* pi = &i;

int*& ii = pi;

不要以為上面的**會浪費乙個int*空間(pi的儲存空間),const* const &ii = &i會偷偷的給int*分配乙個int*的空間,構成乙個「隱身」的左值。

C 小細節7 右值引用

04 24 2020 std move移動操作 知識總結 右值是臨時物件,臨時物件是什麼?現在多了乙個右值引用,它可以接受臨時物件,並且延長它的生命週期而且還有位址可以獲得。右值引用指向將要被銷毀的物件,因此,我們可以從繫結到右值引用的物件 竊取 狀態。相當於去偷快要銷毀的物件。例子1 隱式型別轉換...

左值 右值 左值引用 右值引用

2015 06 01 15 07 404人閱讀收藏 舉報 c 11 5 一 c 中的左值和右值 誤區 左值位於等號左邊,右值位於等號右邊。c 11中的定義 左值表示式表示的是乙個物件的身份 在記憶體中的位置 而右值表示式表示的是物件的值 內容 左值和右值都是針對表示式而言的,左值是持久的,右值是短暫...

左值 左值引用 右值 右值引用

1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...