C++ 學習筆記之 引用。本站提示廣大學習愛好者:(C++ 學習筆記之 引用)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 學習筆記之 引用正文
引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣.
二.用法:例如: int & a = b;
先看一個例子:
#include <iostream> using namespace std; int temp ; int & F(){ temp*=2; return temp; } int F1(){ temp*=2; return temp; } int main(){ temp = 5; int &d = F(); int e = F(); int f = F(); cout << &d << " " << &temp << endl; cout << &e << " " << &temp << endl; cout << &f << " " << &temp << endl; cout << d << " " << temp << endl; return 0; }
程序輸出結果為:
0x40d020 0x40d020
0x61ff18 0x40d020
0x61ff14 0x40d020
40 40
從結果中可以看到,當使用引用作為程序返回值並且將這個返回值賦值給引用類型時,他們的地址是相同的(都指向temp這個變量),其他情況都產生了值的賦值,發生了地址的變化。由此也可以看出,使用引用可以減少值的復制,特別是當需要傳的數據特別大的時候。
int b = 4; const int a = b;
使用常引用可以是引用的值不可修改。這樣可以防止因誤操作引發的數據修改,保證了安全性。
一般非引用函數都是只能作為右值,函數一旦計算完成那麼它就是一個確定的常數。但引用函數不同。它既可作為左值,又可作為右值。
int &d = ++F();
相當於
int A[10]; int &array = A;
這是它作為左值的應用。
但當我執行
int &d = F()++;
這樣會產生錯誤。錯誤信息為:
error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
這個錯誤信息與執行
int &d = 5;
的錯誤信息一致,說明F()++操作實際上是相當於先把F()的值存到一個整型常量中,然後F()(相當於temp)的值加一.一個整型常量無法復制給int&類型。
執行
const int &d = F()++;(使用常引用)
或
int d = F()++;(把常量值拷貝到變量中)
才可以正常編譯。
如果嘗試執行
int A[10]; int &array = A;
編譯器會報錯:
error: declaration of 'd' as array of references
但我可以對指針用引用:
int *p = A; int &array = p;
編譯成功。
至於為什麼不能對數組用引用,網上答案很多,我自己不能確定哪種答案是正確的,大家可以自行搜索相關問題。
1 temp = 5; 2 const int t = 6; 3 int &d = temp; 4 const int &e = temp; 5 const int &f = t; 6 int &g = t;//編譯錯誤
常量變量都可以賦值給常引用,但只有變量值才可以給普通引用,若常量值給普通引用會發生編譯錯誤。