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

C++ (*ptr).f()和ptr->;之间有什么区别;f()?,c++,pointers,C++,Pointers,可能重复: 这两者之间的区别是什么: (*ptr).f(); 这是: ptr->f(); 在pTR是一个指向C++类的指针,它具有函数“代码> f< /代码>?< p>根本没有区别。代码>(*ptr.f()是更丑陋的方法 实际上,如果ptr是某个智能指针,其运算符*和运算符->过载并执行一些副作用,那么您可能会遇到问题。但这真的是非常糟糕的事情。它就像定义真假一样邪恶除了风格/类型的差异,没有区别。它与(*ptr)完全相同vsptr->member=7当使用指向结构或类的指针时。如果

可能重复:

这两者之间的区别是什么:

(*ptr).f();
这是:

ptr->f();

在pTR是一个指向C++类的指针,它具有函数“代码> f< /代码>?

< p>根本没有区别。代码>(*ptr.f()是更丑陋的方法


实际上,如果
ptr
是某个智能指针,其
运算符*
运算符->
过载并执行一些副作用,那么您可能会遇到问题。但这真的是非常糟糕的事情。它就像定义真假一样邪恶

除了风格/类型的差异,没有区别。它与
(*ptr)完全相同vs
ptr->member=7当使用指向结构或类的指针时。

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


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

唯一的区别是编译器将
ptr->f()
转换为
(*ptr).f()
(也就是说,这只是一个快捷方式)感谢您提到(几乎)永远不要以违反最小意外原则的方式定义运算符。