1. 程式人生 > >從零開始的程式設計生活

從零開始的程式設計生活

  • 左值與右值
    • 左值是長久存在的值, 如 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此時是引用
        • 引用傳參
          • 無需將引數複製一份臨時變數
          • 如果不希望改變引數,可以使用常量引用
        • 返回值傳遞
          • 避免的返回值的複製
          • 不要返回對一個區域性變數的引用,一般是返回一個靜態變數的引用
          • 如果不想返回的變數在後面被改變,應該返回常量引用