指针->调用() 和 (*指针) 之间的区别。调用()

Difference between Pointer->Call() and (*Pointer).Call()

本文关键字:指针 调用 之间 区别 gt      更新时间:2023-10-16

可能的重复项:
PTR->hello();/* VERSUS */(*ptr).hello();

我正在学习C++,我的问题是使用箭头运算符(->)或取消引用指针*调用函数之间是否有任何区别。

这两个案例说明了我的问题。

Class* pointer = new Class();
(*pointer).Function();         // case one
pointer->Function();           // case two

有什么区别?

如果运算符*->未重载,则两个版本完成相同的操作。

给定

Class* pointer = new Class();

然后

(*pointer).Function();         // case one

取消引用指针,并在引用的对象上调用成员函数Function。它不使用任何重载运算符。运算符不能在原始指针或内置类型参数上重载。

pointer->Function();           // case two

这与第一个语法相同,使用内置->,因为pointer是一个原始指针,但此语法更适合较长的取消引用链。

例如考虑

(*(*(*p).pSomething).pSomethingElse).foo()

p->pSomething->pSomethingElse->foo()

->符号也一目了然。