c++引用小結
阿新 • • 發佈:2020-12-09
技術標籤:c++
在c++中引用方式為:
int &c = a;
引用的本質為
int * const c=a;
因此c本質是個指標常量,且其指標指向不可變。因此在有些需要傳遞某種資料型別的指標時,可以用引用的方式傳遞。
引用的第二種方式,就是系統會自動對引用變數進行解引用取值操作;例如:
int &c = a;
c = 100;//*c = 100
int &c = a;本質像我前面說的,是將a的地址傳遞給c,c本質為指標常量。
c = 100;這句話如果將c看作指標常量來說,是錯誤的,此時系統會自動認為*c=100;因此此時可以將c看作a的一個別名。
綜上所述,引用既可以看作變數的地址傳遞,也可以看作變數的引用傳遞,即為物件取別名
區域性變數的引用不可作為函式返回值:
//返回區域性變數引用
int& test01() {
int a = 10; //區域性變數
return a;
}
int main() {
//不能返回區域性變數的引用
int& ref = test01();
cout << "ref = " << ref << endl;
cout << "ref = " << ref << endl;
system("pause");
return 0;
}
其原因是因為區域性變數存放在棧區,當函式呼叫完成之後,區域性變數記憶體空間被釋放,此時如果呼叫其引用,會產生記憶體錯誤。
當以引用(靜態變數/全域性變數)作為函式返回值時,函式呼叫可作為左值。
//返回靜態變數引用
int& test02() {
static int a = 20;//靜態變數存放於全域性區,是程式結束後才會釋放
return a;
}
int main() {
//如果函式做左值,那麼必須返回引用
int& ref2 = test02();
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
test02() = 1000;
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
system("pause");
return 0;
}
上述輸出結果如下: