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

m0n*_*awk 2 c++ pointers

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

这有什么区别:

(*ptr).f();
Run Code Online (Sandbox Code Playgroud)

还有这个:

ptr->f();
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*rov 8

根本没有区别.(*ptr).f();这是最丑陋的方式.

其实,如果ptr是一些智能指针和operator*operator->过载,并执行一些副作用,那么你可能有这个问题.但这真的是非常糟糕的事情.它就像邪恶一样#define true false


Mik*_*our 8

如果ptr是普通指针,则两者都是等价的.ptr->f是一个快捷方式,用于取消引用指针(相当于(*ptr))并访问取消引用对象的成员(相当于.f).

如果ptr是,重载类operator->operator*,那么他们将分别调用不同的操作符重载,所以可以有不同的行为.