[英]Syntax for dereferencing a pointer in C (or C++)
我有一位同事在C中檢查這樣的代碼(語法#1):
(*(*(*p_member).p_member).p_member).member
當我問他為什么不使用 - >(語法#2)時:
p_member->p_member->p_member->member
他得到了真正的防御性說明語法#2比#1更復雜......我最后改變了他的代碼,因為我不得不修改它並且無法讀取它,然后他生氣了,我實際上觸摸了它...
SO社區更喜歡哪種語法? 兩者都有效,但我發現語法#2更具可讀性。
由於問題是主觀的,我將此設置為社區維基。
語法#1的技術術語是“堅果”。
也就是說,我擔心一些代碼必須間接3次。
我認為你的同事要么是沒有經驗的,要么是某種新的,或者只是簡單的“無知”。 你會發現一致的選擇是使用 - >語法。
在C ++中我肯定會使用 - >,因為 - >可以重載。
在CI中也會使用 - >因為它更容易閱讀,更快速的輸入和更少的錯誤(希望你的同事不會迷失在括號中!)。
我在這里打字袖口,但我的回憶是,在K&R的第一版中解釋了C中->
運算符存在的邏輯(釋義):因為否則你必須鍵入(*p).a
由於*
和.
的必要優先權.
運營商。
不使用->
為其預期目的是堅果。
我會帶走門#2,蒙蒂! 當然它更難以打字,但它比找出哪個運算符取消引用哪個指針更清晰。
您可能還希望在您的團隊中討論“代碼所有權”的概念。 你的同事並不“擁有”代碼,公司也是如此。 因此,公司雇用的任何人都有充分理由可以編輯它。
主觀啊?
我也會拿#2!
第二種變體顯然看起來更清晰。 偏好#1的唯一理由是,當#1與#2的效果真的不同時,會出現一些奇怪的運算符*和運算符 - >重載。
壞同事。 改變同事。
我曾經遇到過“ - >”沒有在幾個編譯器中正確實現的經驗......所以當你有多個嵌套級別時,正常(* p).a更有可能工作。
沒有2。
話雖如此,不要通過更改代碼來冒犯別人,特別是如果它是風格問題。 這不值得。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.