[英]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.