2

可能重复:
C++ - (*) 之间的差异。和->?

这有什么区别:

(*ptr).f();

和这个:

ptr->f();

中,ptr 是指向具有函数的 C++ 类的指针f

4

3 回答 3

8

根本没有区别。(*ptr).f();是更丑陋的方法。

实际上,如果ptr是一些智能指针及其operator*operator->被重载并执行一些副作用,那么您可能对此有问题。但这确实是非常糟糕的事情。它和邪恶一样#define true false

于 2013-02-01T13:47:09.700 回答
8

如果ptr是普通指针,那么两者是等价的。是取消引用指针(相当于)和访问被取消引用对象的成员(相当于 )ptr->f的捷径。(*ptr).f

如果ptr是一个重载operator->和的类operator*,那么它们将各自调用不同的运算符重载,因此可能具有不同的行为。

于 2013-02-01T13:50:02.890 回答
0

除了风格/打字差异外,没有任何区别。这与使用指向结构或类的指针时的(*ptr).member = 7;vs完全相同。ptr->member = 7;

于 2013-02-01T13:48:41.330 回答