可能重复:
C++:ptr-> hello();/*VERSUS*/(*ptr).hello();
为什么C区分 - >和.?
我知道成员运算符(.)和指针运算符( - >)之间的区别.
为什么C设计人员为此访问创建了不同的运算符?为什么编译器不能自己搞清楚?
如果你总是使用一个.是否存在模糊的情况,无论你是指成员还是指针成员?
编辑:我不是在寻找"(*a).b"语法.我问为什么设计师不允许你用"ab"代替"a-> b"?
你真的希望编译器"自己解决它吗?" 如果确实如此,则以下内容将评估相同的内容(假设p是指向具有成员的结构的指针x):
(*p).x;
p.x
Run Code Online (Sandbox Code Playgroud)
如果指针的反引用是隐含在那里,它应该是隐式的到处都是?考虑:
int* p;
int i = p; // should dereferencing be implicit here as well?
Run Code Online (Sandbox Code Playgroud)
我认为这比拥有两个独立的运营商要困难得多.
让两个操作员帮助跟踪您拥有的间接层数也很有帮助.当然,->操作员对此并不是必需的,因为p->x它相当于(*p).x,但它确实使代码更清晰,更容易阅读.
当您拥有一种其核心旨在成为“便携式汇编器”的语言时,您不会试图向用户隐藏实现细节。当然,编译器可以判断出表达式中的a.b问题a是一个指针。你可以吗?可靠吗?每时每刻?用毛茸茸的、复杂的代码?您是否无法想象无法快速注意到该a指针可能会成为问题的情况?
停止思考“难写”,开始思考“容易阅读”。(是的,我知道。这违背了整个 C 程序员的神话!)您阅读代码的频率将比编写代码的频率高几个数量级。
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |