假设我有一个对象
class A {
public:
int bar();
};
A foo() {return A();}
int A::bar() {return 5;}
然后我这样做:
int i = foo().bar();
foo()
返回时创建的临时值调用什么构造函数?
最佳答案
代码是:
A foo() {return A();}
调用foo()
时,效果顺序为:
- 由
A()
使用A
的默认构造函数临时创建。 - 返回类型为
A
的值对象 使用复制/移动构造函数创建,步骤 1 的临时值作为参数(即,如果存在则移动构造函数,否则复制构造函数) . - 第 1 步中的临时对象被销毁。
然而这是一个copy elision上下文,因此编译器可能会将所有 3 个步骤合并为一个,并使用 A
的默认构造函数创建返回值对象。
返回值对象 会发生什么取决于调用代码的作用。可能还有进一步的复制省略。在使用上:
int i = foo().bar();
没有其他事情发生;在返回值对象上调用bar()
,将值分配给i
,然后销毁返回值对象。
关于c++ - 在这种情况下调用什么构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38882921/