我正在学习C ++,我的问题是如果使用箭头操作符(->
)或取消引用指针*
来调用函数之间有任何区别。
这两个案例说明了我的问题。
Class* pointer = new Class();
(*pointer).Function(); // case one
pointer->Function(); // case two
有什么区别?
答案 0 :(得分:6)
如果运算符*
和->
没有重载,则两个版本都会完成相同的操作。
答案 1 :(得分:2)
鉴于
Class* pointer = new Class();
然后
(*pointer).Function(); // case one
取消引用指针,并在引用的对象上调用成员函数Function
。它不使用任何重载运算符。操作符不能在原始指针或内置类型参数上重载。
pointer->Function(); // case two
这与第一个相同,使用内置->
,因为pointer
是原始指针,但此语法更适合更长的链解除引用。
考虑例如。
(*(*(*p).pSomething).pSomethingElse).foo()
与
p->pSomething->pSomethingElse->foo()
->
符号也一目了然。