1. 引用變量
引用變量在創建時必須初始化,通常,引用是在聲明時分配的,不過引用數據成員可以在包含該成員的類的初始化列表中進行初始化。
int x = 3;
int& xRef = x;
int& emptyRef; // does not complie
除非引用指向一個const值,否則不能創建指向未命名值的引用。
int& unnameRef = 5; // does not complie
const int& unnameRef = 5; // Works!
2. 修改引用:引用總是指向初始化時指定的那個變量,一旦創建引用就不能再修改。
int x = 3, y = 4;
int& xRef = x;
xRef = y; // change value of x to 4
xRef = &y; // does not compile
int& yRef = y;
yRef = xRef; // just assigns values
3. 指針引用和引用指針
可以創建指向任何類型的引用,包括指針類型。
int* intPtr;
int*& ptrRef = intPtr;
ptrRef = new int;
*ptrRef = 5;
不能聲明指向引用的引用,也不能聲明引用指針(指向引用的指針)
int x = 3;
int& xRef = x;
int&& xDoubleRef = xRef; // does not complie
int&* refPtr = &xRef; // does not complie
4. 引用參數
void swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int x = 5, y = 6;
swap(x, y); // Works!
swap(5, 6); // Does not complie
return 0;
}
5. 引用返回類型:從函數或方法中可以返回引用。但要避免返回變量(比如堆棧上自動分配的變量)的引用,因爲函數結束時會撤銷這些變量。