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

时间:2019-12-09 09:17:46

标签: c++ pointers syntax

由于我到目前为止只使用Web和.NET语言,因此我正在从高级编程课程中学习C ++。 在中途测试中,讲师已将我对(* a).b的所有使用标记为错误并扣除了分数,这可能会对我的最终成绩产生负面影响,并且我需要一个接近完美的分数才能完成从Web堆栈到应用程序的工作转换堆栈,那么你们中的一些人可以帮助我解决这一纠纷吗?

1 个答案:

答案 0 :(得分:7)

如果a是一个指针,则功能完全没有区别,实际上,一个是用另一个[expr.ref§2]来表示的:

  

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

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

最后,所有内容都与约定和可读性有关。 ->运算符是* / .对的简写形式,因为它更短并且具有更好的优先级规则(不需要括号)。因此,人们确实会使用它而不是* / .