C 中引用不能再更改繫結的物件的理解

2021-09-08 20:24:33 字數 910 閱讀 3675

**:

c++primer教材上說引用不能再改變繫結搞得物件,也就是引用再第二次賦值。

可是下面的程式能正常執行,不會出錯。這裡怎麼出現了引用賦值語句呢(語句[1])?是不是教材錯了?原因究竟是什麼呢? 

請看如下程式:

#include

void main()

首先想想程式執行結果應該是什麼呢?

vc6.0上執行後的結果是: 

i=5; j=5; k=5

分析: 

程式沒有錯誤,是正確的,但是並不能說明:引用能重新賦值。很明顯,引用是不能重新賦值的,只是理解上錯了! 

引用的賦值:是指引用初始化時,它的引用物件只能是變數,並且,一旦它指定為某乙個物件的引用後,就不能更改了。但是,可以用這個引用來改變它的物件的值,從而達到引用的目的——作為變數物件的別名。 

如上例,引用k初始化為i,即k從此以後一直是i的引用,若想讓k不再是i的引用而成為別的變數的引用那是不可能的。所以,接下來的一句「k=j;」就不能理解成:取消k是i的引用而將k作為j的引用。正確的理解應該是:利用引用k來改變它所指物件i的值,即相當於語句「k=5;」。若在上示例語句「k=j;」後加上一句「j=10」,結果將是:「i=5; j=10; k=5」,從這個結果就能很好理解了。 

所謂的引用的重新賦值,應該是: 

int x,y,z; 

int &x=y; 

&x=z; 

這種是對引用x,改變了它的指定物件,一開始是y的引用,之後,又重新說明是z的引用,這種引用的重新賦值是不允許的。

另外: 

常引用所引用的物件的值是不能更改的,即上述示例中若將語句「int& k=i;」更改為「const int& k=i;」,則在編譯時就會出現錯誤了。

C 中引用不能重新賦值的理解

教材上說引用是不能重新賦值的,可是下面的程式能正常執行,不會出錯。這裡怎麼出現了引用賦值語句呢 語句 1 是不是教材錯了?原因究竟是什麼呢?請看如下程式 include void main int i 1,j 5 int k i k j 語句 1 cout i j k 首先想想程式執行結果應該是什麼...

C 非常量引用不能指向臨時物件

目錄 舉例分析 解決1 舉例 非常量引用 指向 臨時物件 即 將 臨時物件 傳遞給 非常量引用型別。如以下情況就會出現 實現實數rational類,實數可以使用 號相加,運算的結果要可以使用 cout 以分數形式輸出 實數rational 的值 rational a 4,5 rational b 1...

再論C 中的const和引用

今天給大家分享一下這段時間學習c 的總結學習 c 裡面的const關鍵字和引用。一 const關鍵字的總結 1 const什麼時候為唯讀變數,什麼時候又是常量呢?1 const常量的判別規則 2 const引用的型別與初始化變數的型別 版本一 include int main 輸出結果 root t...