所有按引用傳遞的引數必須加上 const.
定義:
在 c 語言中, 如果函式需要修改變數的值, 引數必須為指標, 如 int foo(int *pval). 在 c++ 中, 函式還可以宣告引用引數: int foo(int &val).
優點:
定義引用引數防止出現 (*pval)++ 這樣醜陋的**. 像拷貝建構函式這樣的應用也是必需的. 而且更明確, 不接受 null 指標.
缺點:
容易引起誤解, 因為引用在語法上是值變數卻擁有指標的語義.
結論:
函式引數列表中, 所有引用引數都必須是 const:
void
foo(
const string &in, string *out)
;
事實上這在 google code 是乙個硬性約定: 輸入引數是值參或 const 引用, 輸出引數為指標. 輸入引數可以是 const 指標, 但決不能是非 const 的引用引數,除非用於交換,比如 swap().
有時候,在輸入形參中用 const t* 指標比 const t& 更明智。比如:
總之大多時候輸入形參往往是 const t&. 若用 const t* 說明輸入另有處理。所以若您要用 const t*, 則應有理有據,否則會害得讀者誤解。
C 風格 右值引用
只在定義移動建構函式與移動賦值操作時使用右值引用.不要使用 std forward.定義 右值引用是一種只能繫結到臨時物件的引用的一種,其語法與傳統的引用語法相似.例如,void f string s 宣告了乙個其引數是乙個字串的右值引用的函式.優點 用於定義移動建構函式 使用類的右值引用進行構造的...
C 引用引數
最近經常和同事討論引用引數的問題,為了搞清楚,查了些資料,其中clr via c 中講的比較清楚,整理了下 摘自 clr via c 在預設情況下,clr假設所有的方法引數都是按值傳遞的。當引數為引用型別的物件時,引數的傳遞時通過傳遞指向物件的引用來完成的 引用本身是按值傳遞的 這意味著方法可以改變...
C 引用引數
最近經常和同事討論引用引數的問題,為了搞清楚,查了些資料,其中clr via c 中講的比較清楚,整理了下 摘自 clr via c 在預設情況下,clr假設所有的方法引數都是按值傳遞的。當引數為引用型別的物件時,引數的傳遞時通過傳遞指向物件的引用來完成的 引用本身是按值傳遞的 這意味著方法可以改變...