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

In C++. whats the difference between (*a).b and a->b?

本文关键字:gt 区别 什么 C++      更新时间:2023-10-16

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

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

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

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

最后,这一切都与惯例和可读性有关。->运算符作为*/.对的简写存在,因为它更短并且具有更好的优先级规则(不需要括号(。因此,人们确实会使用它而不是*/..