C C 引用必須為左值的問題詳解

2022-09-23 16:48:08 字數 739 閱讀 7526

我們常常會遇到這樣的問題:

const int& a = 101;//對

int& b = 101;//錯

例子:int a;

int &b = a;

a = 10;

printf(「b = %d\n」,b);

此時b = 10,b是a的引用,就是說b和a的位址相同,對a做改變b也跟著變化。

那麼這是為什麼呢?

下面我們來講乙個概念:左值和右值?

左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物件,右值是指表示式結束時就不再存在的臨時物件。並不是我們所理解的在=左邊就是左值,在=右邊就是右值。

c/c++規定:對於物件的引用必須是左值(常量引用除外)

const引用能夠繫結到臨時物件, 並將臨時物件的生命週期由」建立臨時物件的完整表示式」提公升至」繫結到的const引用超出作用域」。 non-const 引用沒有這個功能

回到我們剛開始的那個問題,為什麼加了const以後就正確呢,不加就不行呢?

其實我們可以這樣去理解:

加了const以後說明a是常量,a的值是不變的,一直都是101。此時a是左值。

如果不加const,b的值是可以變化的,b只是乙個臨時變數,不是左值。會出現錯誤:將型別為 『int&』 的非 const 引用初始化為型別為 『int』 的臨時變數無效。就是說到分號結束後b也就沒有了,不是我們想要的結果。

同時又是c語言不支援int &b = a;這種寫法,但是c++支援。

非常量引用的初始值必須為左值

今天碰到了這個問題,回顧一下概念 左值與右值 根據c primer第五版,當乙個物件被用作右值的時候,用的是物件的值,當物件被用作左值的時候,用的是物件的身份 下面這個函式就是正確的 includeint function int a int main 而這個就是錯誤的 includeint fun...

如何理解左運算元必須為左值

宣告 本博文用於學習總結及工作心得 在c語言中經常會遇到乙個問題就是做運算元必須為左值,看一下 int a 1,b 2 a在c 編譯器環境下,能正常執行,沒有錯誤,但是在c編譯器下卻會報錯 error c2106 做運算元必須為左值 什麼是左值?首先需要明白什麼是表示式 表示式由乙個或多個運算元通過...

非常量引用初始化必須為左值

當引用的初始式是乙個左值 是乙個物件,你可以取得它的位址 其初始化就是非常簡單的事情。對 普通 t 的初始式必須是乙個型別t的左值。對乙個const t 的初始式不必是乙個左值,甚至可以不是型別t 在這種情況下 1 首先,如果需要將應用到t的隱式型別轉換 2 而後將結果存入乙個型別t的臨時變數 3 ...