為什麼谷歌不建議使用 non const reference 作為 C 的函式引數?

時間 2021-06-03 17:12:59

1樓:

人家意思說的是"output arguments as references can be confusing"

你可以看下chromium的原始碼,如果乙個函式的需要在形參列表裡面用返回值,那麼他一定是個pointer,如果是imput arguments,pointer, reference隨便用

至於為什麼,考慮下因為如果乙個函式形參列表有輸入a和輸出b,那麼你的呼叫形式就是func(a,b);

從呼叫的地方就很難看出b是輸出變數,反之,如果b以指標語義傳進去,那就是

func(a, &b);

因為C++幾乎很少的情況需要把乙個值語義的東西變成指標,那麼這個時候b很容易被看出是個輸出的東西

2樓:exiledkingcc

不知道Google為什麼這麼提倡。

但是我覺得這樣做的理由並不是非常充分。

反正我是能用reference就用reference。

傳reference其實在各種庫裡面還是非常常見的,包括標準庫,比如用到std::error_code的,都是reference。

3樓:拉維

補充一下現有的回答

個人感覺「使用const&作為入參,*作為出參」,倒不完全是為了方便呼叫者,因為同樣可以反過來「使用const*作為入參,&作為出參」,對於呼叫者來說一樣是清晰的(如果能接受這套邏輯的話)。這裡的"References can be confusing"更多的是說提高函式自身的可讀性:入參在命名風格上和區域性變數是一致的,對它們的修改都不會影響到函式外,顯然傳入&作為出參的話會打破這個規則

為什麼很多人不建議使用駝峰命名法,有什麼弊端麼?

已重置 我是用js的,我們CTO規定我們都用下劃線,但是不管是第三方庫還是自帶方法名全都是駝峰的,這樣就導致了下劃線跟駝峰混用的局面,而且我覺得下劃線簡直就是英語裡把空格換成下劃線的感覺,就像一句英文,容易跟它的值混淆。 jack tang 因為駝峰命名法有很多時候存在不同的理解,比如首字母大寫還是...

為什麼不建議用 try catch?

stevefan1999 因為try catch需要用到 下推 自動機,而用 下推 自動機的代價很高。不過如果自動機能提供更高的價值的話,很多人選擇不了了之。譬如async也是自動機的建構的。至少C C Babel TS四大金剛是這樣 但是它能提供的功能與價值很高 簡化非同步程式設計的困擾,在普遍場...

寶馬為什麼不建議輪胎換位?

FREECAR車勢 其實如果從汽車廠家和經銷商的角度一定不建議輪胎換位。因為他們對他們產品極致表現安全角度考慮。寶馬多半都是防爆胎。當然如果你是一般日常上下班更換太大問題。首先每個車輛的駕駛習慣不同會導致吃胎,動平衡不同擔心會有安全隱患。FREECAR車勢 關注汽車及零配件15年。 寶馬後驅車型幾乎...