等號左邊的函式
Prerequisites:
函式傳回值是參考別名
以下程式碼是將全域變數x的參考別名作為傳回值。
1
2
3
4
5
6
//全域變數
int x = 10;
//返回全域變數x的參考別名
int& setX(){
return x;
}
將setX() = 99
可以視作為int& x_ref = 99;
二者是相同意思。
1
setX() = 99;
完整程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
//全域變數
int x = 10;
//返回全域變數x的參考
int& setX(){
return x;
}
int main() {
cout << "Before x = " << x << endl;
//將x全域變數參考,設值成99
setX() = 99;
cout << "After x = " << x << endl;
return 0;
}
Before x = 10
After x = 99
不能傳回區域變數的參考
以下程式碼會出錯,因為區域變數x在函式結束的時候就會被系統記憶體釋放,無法作為參考。
1
2
3
4
int& setX(){
int x = 10;
return x;
}
引數作為參考
以下程式碼將main()函式中的x變數傳進setX()的函式,並傳回x變數的匿名參考別名。
將x的參考設值99。
1
2
3
4
5
6
7
8
9
10
11
12
13
//傳回值為參考別名
//參數r為x的參考別名
int& setX(int& r){
return r;
}
int main() {
int x = 10;
cout << "Before x = " << x << endl;
//x傳入函式,傳回x的參考
setX(x) = 99;
cout << "After x = " << x << endl;
return 0;
}
Before x = 10
After x = 99
函式不想放在等號左邊
若不想被人修改傳回值,可將傳回值設為const,但函式呼叫者也需要加上const。
函式語法
const 資料型態& 函式名(資料型態& 原始變數);
const int& getValue(int& z);
函式呼叫者
const 資料型態& 別名 = 函式名(原始變數);
const int& y = getValue(x);
以下程式碼將編譯錯誤,函式無法放在等號左邊。
getValue(x) = 100;
以下為完整程式碼
1
2
3
4
5
6
7
8
9
10
11
const int& getValue(int& z){
z++;
return z;
}
int main() {
int x = 10;
const int& y = getValue(x);
cout << "x = " << x << endl;
cout << "y = " << y << endl;
return 0;
}
x = 11
y = 11