在 C++ 中。(*a).b 和 a->b 有什么区别?

Vol*_*tex 0 c++ syntax pointers

由于到目前为止我只使用过 Web 和 .NET 语言,因此我正在从我的工作中学习高级编程课程中的 C++。在中途测试中,讲师将我对 (*a).b 的所有使用标记为错误并因此被扣分,这可能会对我的最终分数产生负面影响,我需要一个近乎完美的分数才能将工作从网络堆栈过渡到应用程序stack,你们中的一些人能帮我解决这个争端吗?

Que*_*tin 7

Ifa是一个指针,在功能上根本没有区别,实际上一个是用另一个 [ expr.ref§2 ] 表示的:

表达式E1->E2被转换为等价形式(*(E1)).E2;[expr.ref] 的其余部分将仅解决第一个选项(点)。

如果a是具有重载运算符*and的类的实例->,则可能有所不同。但是这样的差异会令人惊讶,因此我认为该类存在错误。

最后,这一切都与约定和可读性有关。所述->操作者存在作为一个速记*/.对,因为它是较短的,具有更好的优先规则(无需括号内)。因此,人们确实会使用它而不是*/ .