【发布时间】:2013-01-16 20:19:51
【问题描述】:
【问题讨论】:
-
唯一的区别是编译器会将
ptr->f()转换成(*ptr).f()(也就是一个快捷方式)。
【问题讨论】:
ptr->f()转换成(*ptr).f()(也就是一个快捷方式)。
根本没有区别。 (*ptr).f(); 是更丑陋的做法。
实际上,如果ptr 是一些智能指针,并且它的operator* 和operator-> 被重载并执行一些副作用,那么你可能会遇到这个问题。但这确实是非常糟糕的事情。和#define true false一样邪恶
【讨论】:
如果ptr 是一个普通指针,那么两者是等价的。 ptr->f 是取消引用指针(相当于(*ptr))和访问被取消引用对象的成员(相当于.f)的捷径。
如果ptr 是一个重载operator-> 和operator* 的类,那么它们将各自调用不同的运算符重载,因此可能具有不同的行为。
【讨论】:
除了风格/打字差异之外,没有任何区别。使用指向结构或类的指针时,它与 (*ptr).member = 7; 与 ptr->member = 7; 完全相同。
【讨论】: