C 風格 引用引數

2021-08-09 15:56:30 字數 746 閱讀 5101

所有按引用傳遞的引數必須加上 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假設所有的方法引數都是按值傳遞的。當引數為引用型別的物件時,引數的傳遞時通過傳遞指向物件的引用來完成的 引用本身是按值傳遞的 這意味著方法可以改變...