c 常量引用賦值為其他型別變數的坑

2021-09-29 01:51:46 字數 616 閱讀 5518

c++裡給常量引用初始化賦值的型別不一致的時候,編譯器會建立臨時量,這個時候常量引用其實是引用的臨時量,這個臨時量我們是沒法訪問的。如果改變了被引用的變數的值,通過引用來輸出的話還是輸出原來的值(即臨時量的值)。

如果給常量引用初始化賦值的型別是一致的,那麼編譯的時候就不會生成臨時量,這個時候不管怎麼改變被引用的變數的值,通過引用輸出的值都是被引用的值,而不是臨時量。

舉例如下:

c++中常量引用:const int &p=someval;

當等號後面跟的是乙個非int型別的基本類變數,編譯器會建立臨時量。比如:

float someval=3.14159;

const  int &p=someval;

這個時候,編譯器會如下操作給p賦值:

const int tmp=3;

const int &p=tmp;

這個時候如果改變了someval的值,在通過p輸出的時候不會是someval的值。

someval=55.5555;

cout《完整測試程式:

int main(int argc,char** ar**)

C 值型別賦值與引用型別的賦值

在c 中,資料型別大致可以分為兩類,一類是值型別,一類是引用型別。初學者往往會被型別之間的相互賦值搞的很迷惑,尤其是引用型別變數的相互賦值。現在舉2個例子,來一一說明。值型別變數的賦值 值型別變數中儲存的是實際資料,在賦值的時候只是把資料複製乙份,然後賦給另乙個變數。例子1 int var1 2 i...

C 值型別賦值與引用型別的賦值

c 程式設計中,大家會經常使用到不同的資料型別,那麼 程式語言到底有什麼型別呢?具體如下 1 值型別 各種值型別總是含有相應該型別的乙個值。c 迫使你初始化變數才能使用它們進行計算 變數沒有初始化不會出問題,因為當你企圖使用它們時,編譯器會告訴你。每當把乙個值賦給乙個值型別時,該值實際上被拷貝了。相...

C 值型別和引用型別(未賦值的區域性變數)

引言 這部分內容還是很重要的,那麼是什麼讓我對值和引用型別著迷呢?我們先來看一下例子 這個是我們當時在討論設計模式的時候看到的,你們可以想想,為什麼會宣告null?直接宣告 expression expression 不行嗎?如果直接宣告 expression expression 會出現什麼情況?...