(* ptr).f()和ptr-> f()之间有什么区别?

时间:2013-02-01 13:46:19

标签: c++ pointers

  

可能重复:
  C++ - Difference between (*). and ->?

这有什么区别:

(*ptr).f();

和此:

ptr->f();

中,ptr是一个指向C ++类的指针,它有一个函数f

3 个答案:

答案 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;完全相同。