答案 0 :(得分:8)
完全没有区别。 (*ptr).f();
是更加丑陋的方式。
实际上,如果ptr
是某个智能指针并且其operator*
和operator->
超载并执行一些副作用,那么您可能会遇到此问题。但这真的是非常糟糕的事情。它和#define true false
答案 1 :(得分:8)
如果ptr
是普通指针,那么两者都是等价的。 ptr->f
是取消引用指针(相当于(*ptr)
)并访问解除引用对象的成员(相当于.f
)的快捷方式。
如果ptr
是一个重载operator->
和operator*
的类,那么它们将分别调用不同的运算符重载,因此可能会有不同的行为。
答案 2 :(得分:0)
除了风格/打字差异外,没有区别。当使用指向结构或类的指针时,它与(*ptr).member = 7;
vs ptr->member = 7;
完全相同。