一段比較有意思的C++代碼



// 代碼段  1 
double a = 1.5;
const int & b = a; //必須有const不然報錯
a = 2.5;
cout << a << " " <<b<< endl; // 輸出 a = 2.5 b = 1;

 

// 代碼段  2
int c= 2;
const int &d = c; // 可有可無const
c = 3;
cout << c << " " << d << endl; // 輸出 a = 3 b =3

 

問題:1.為什么第一段代碼必須有const?第二段中不用有const?

   2.為什么第一段代碼中a,b輸出的值不同?而第二段中c,d的值相同?

 

 

 

原因:

1.在第一段中,a的值為double類型,而b是整形類型的對a的引用,所以,這個過程必定會發生隱式類型轉換。

      對於這段 const int & b = a; 代碼,編譯器會把這段代碼變成如下形式

          const int temp = a;   // 隱式轉換,生成中間temp,而這個temp是常量

          const int &b = temp; 

所以b必須為常量引用(因為中間生成的temp就是常量);而第二段代碼中沒有發生過隱式轉換。

 

2.第一段中因為常量引用b引用的是中間生成的temp。改變a值,對b毫無影響。

第二段中常量引用d引用的是c,沒有生成中間值,所以c改變,d也就改變了。

 


免責聲明!

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



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