從零開始的程式設計生活
阿新 • • 發佈:2018-12-22
- 左值與右值
- 左值是長久存在的值, 如
arr, arr[x], *pt
- 右值是臨時存在的值, 如
x+y, “foo", 2
- 最簡單的判斷方式就是能否用取地址符&操作
- 無法對右值進行更改操作,也無法對右值賦值
- 左值是長久存在的值, 如
- 引用
- 左值引用
- 宣告時在變數的型別後放置一個&來進行。如
string& rstr= str;
- 注意不能將一個右值賦值給左值引用, 如
string& rstr = str + "hello";
- 用途
- 給一個結構複雜的名稱起別名
- 如
auto& whichList = lists[ myhash(x, lists.size() ) ]
- auto 後一定要加&符號, 否則解讀為拷貝
- 如
- 範圍for迴圈
for(auto x : arr) x++;
是不行的, 因為x是拷貝的值,並不能改變arr中原來的值for (auto& x : arr) x++;
可以,因為x此時是引用
- 引用傳參
- 無需將引數複製一份臨時變數
- 如果不希望改變引數,可以使用常量引用
- 返回值傳遞
- 避免的返回值的複製
- 不要返回對一個區域性變數的引用,一般是返回一個靜態變數的引用
- 如果不想返回的變數在後面被改變,應該返回常量引用
- 給一個結構複雜的名稱起別名
- 宣告時在變數的型別後放置一個&來進行。如
- 左值引用