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


教材上說引用是不能重新賦值的,可是下面的程序能正常運行,不會出錯。這里怎么出現了引用賦值語句呢(語句[1])?是不是教材錯了?原因究竟是什么呢?
請看如下程序:

#include<iostream.h>
void main()
{
       int i=1,j=5;
       int& k=i;
       k=j;        //語句[1]
       cout<<"i="<<i<<"; j="<<j<<"; k="<<k<<endl;
}

 

首先想想程序運行結果應該是什么呢?

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;”,則在編譯時就會出現錯誤了。

 

轉載:https://blog.csdn.net/gao1440156051/article/details/51073433


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM