定義引用類型:
int ival = 1024;
int &refVal = ival;
意義:
實質是給ival變量起了別名,叫refVal酪耕。
比如你爸可以叫你全名导梆,也可以叫你乳名,還可以叫你兒子迂烁,都是指你看尼。
注意以下3點:
(1)定義時必須要賦值,不賦值會報錯盟步,下面這樣是錯的:
int &refVal2; //此行報錯
(2)直接用字面值賦值給引用也是錯的:
int &refVal2 = 100; //此行報錯
(3)引用的類型和被引用的變量類型不一致也是錯的:
double dval = 3.14;
int &refVal3 = dval; //此行報錯
既然是別名藏斩,那么引用就等價于變量,可以在等號右邊給其他變量賦值址芯。
int ival = 1024;
int &refVal = ival;
int ival2;
ival2 = refVal; //等價于ival2 = ival;
當然也可以放在等號右邊,被其他變量賦值灾茁。
int ival = 1024;
int &refVal = ival;
int ival2 = 1;
refVal = ival2;
std::cout << ival << " " << refVal << " " << ival2 << std::endl;
輸出結果
1 1 1
你可能會認為現(xiàn)在refVal轉去引用ival2了。并不會這樣谷炸,ta
引用不能轉綁北专,賦值之后只能訪問最初的引用
也就是你的名字會跟你一輩子(不考慮改名的情況)
如果引用加上了const,那就是來搞事情了旬陡。此時拓颓,上文提到要注意的3點只剩1點了:
</br>
(1)const特性本來就是必須要初始化的,所以定義時還是必須要賦值
const int &r1; //此行報錯
(2)現(xiàn)在直接用字面值賦值給引用完全沒問題了:
const int &r1 = 100; //合法
std::cout << r1 << std::endl; //輸出100
(3)引用的類型和被引用的變量類型不一致也是對的:
double dval = 3.14;
const int &r2 = dval;
std::cout << ri << std::endl; //輸出3
//實際上等價于:
double dval = 3.14;
const int temp = dval;
const int &ri = temp;
std::cout << ri << std::endl; //輸出3
另
指針和引用的主要區(qū)別:
(1)指針本身是一個對象描孟,可以對指針賦值和靠背驶睦,指針可以改變指向對象;引用不是一個對象匿醒,不能重新綁定到另一個對象场航。
(2)指針不需要在定義時就賦值;引用必須在定義時賦值廉羔。