假设我有以下变量:
MyObject* obj = ...;
Run Code Online (Sandbox Code Playgroud)
如果此对象具有字段foo,则有两种访问方式:
obj->foo(*obj).foo使用一种方法与另一种方法之间是否有任何区别。或者第一种方法只是第二种方法的语法糖?
我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。
当obj是指针时没有区别。
如果obj是一些类的对象,obj->foo将调用operator->()和(*obj).foo将调用operator*()。理论上你可以重载这些来做完全不同的行为,但这将是一个设计得很糟糕的类。
根据ISO C++20 标准的 \xc2\xa77.6.1.5 \xc2\xb62,将表达式obj->foo转换为(*obj).foo. 所以它只是语法糖。两者是等价的。
\n\n我在想也许第一个可能会导致调用对象的复制构造函数,因为它现在保留了该值。
\n
不会调用构造函数,因为没有创建新对象。
\n