【发布时间】:2021-11-01 19:58:02
【问题描述】:
假设我有以下变量:
MyObject* obj = ...;
如果这个对象有字段foo,有两种访问方式:
obj->foo(*obj).foo
使用一种方法与另一种方法有什么不同。还是第一种方法只是第二种方法的语法糖?
我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。
【问题讨论】:
-
是的,我很确定这只是语法糖。至少在您的情况下是这样;当涉及重载运算符时,行为可能会有所不同。
-
“我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。”你为什么这么认为?
-
对于重载的
operator->,->具有“向下钻取”属性,在该属性中递归应用,直到结果对象为指针。 q.v. stackoverflow.com/a/10460730/4641116 -
@AlessandroTeruzzi 按值传递会导致调用复制构造函数,所以我在想,也许取消引用是按值将对象传递给取消引用它的代码段。只是一个想法,我认为情况并非如此。
标签: c++ dereference