原文鏈接:C++中引用的基本用法
一、基本用法
創建一個對象的引用只需把聲明符寫成&val
的形式即可:
int iVal = 1024;
int &refVal = iVal;
創建引用時,編譯器并不是把拷貝一個值賦給引用,而是把引用和初始的對象綁定在一起,相當于只是給對象起了一個別名??梢酝ㄟ^引用來操作初始化對象,并且通過引用來操作對象時,相當于直接對對象進行了操作。
#include<iostream>
using namespace std;
int main() {
int iVal = 1024;
int &refVal = iVal;
printf("%d %d\n", iVal, refVal); // 1024 1024
refVal += 1;
printf("%d %d\n", iVal, refVal); // 1025 1025
}
以引用作為函數的形參時,在函數內部改變形參的值,函數外部變量的值也會改變:
void add(int &x) {
x += 1;
}
int main(){
int iVal = 1024;
add(iVal);
printf("%d\n", iVal); // 1025
}
可以用引用給引用賦值
,實際上就是把引用綁定的對象作為初始值:
int iVal = 10;
int &refVal = iVal, &refVal2 = refVal; //refVal == refVal2 == 10
二、注意事項
1 引用必須初始化
因為引用只是和對象綁定在一起了,而不是拷貝值,一旦初始化完成,引用將永遠和初始對象綁定在一起。所以引用在使用時必須初始化,并且引用不能重新賦值。
int iVal = 1, iVal2 = 2;
int &refVal = iVal;
int &refVal2; //錯
refVal = iVal2; //錯
2 不能使用引用的引用
引用本身不是一個對象,所以不能定義引用的引用
3 引用對象的類型必須匹配
引用對象的數據類型必須和初始化對象嚴格匹配。
int iVal = 1024;
double &x = iVal; //錯誤
4 不能使用字面量初始化引用類型
引用類型的初始值必須是一個對象,不能為一個字面量。
int &refVal = 10; //錯誤