什么是 - >和之间差异的理由.在c/c ++中?

Goo*_*son 7 c c++ standards

可能重复:
C++:ptr-> hello();/*VERSUS*/(*ptr).hello();
为什么C区分 - >和.?

我知道成员运算符(.)和指针运算符( - >)之间的区别.

为什么C设计人员为此访问创建了不同的运算符?为什么编译器不能自己搞清楚?

如果你总是使用一个.是否存在模糊的情况,无论你是指成员还是指针成员?

编辑:我不是在寻找"(*a).b"语法.我问为什么设计师不允许你用"ab"代替"a-> b"?

Jam*_*lis 6

你真的希望编译器"自己解决它吗?" 如果确实如此,则以下内容将评估相同的内容(假设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,但它确实使代码更清晰,更容易阅读.


JUS*_*ION 0

当您拥有一种其核心旨在成为“便携式汇编器”的语言时,您不会试图向用户隐藏实现细节。当然,编译器可以判断出表达式中的a.b问题a是一个指针。你可以吗?可靠吗?每时每刻?用毛茸茸的、复杂的代码?您是否无法想象无法快速注意到该a指针可能会成为问题的情况?

停止思考“难写”,开始思考“容易阅读”。(是的,我知道。这违背了整个 C 程序员的神话!)您阅读代码的频率将比编写代码的频率高几个数量级。


归档时间:

查看次数:

458 次

最近记录:

15 年,6 月 前