【发布时间】:2014-02-17 09:02:25
【问题描述】:
假设我有这段代码:
class Base {
public:
void f() {}
private:
int n;
};
Base foo()
{
Base b;
// processing
return b;
}
Base 没有定义复制构造函数,并且查看其成员编译器不会合成一个。
此代码是否应用了命名返回值 (NRV) 优化?编译器应用 NRV 的确切规则是什么?
【问题讨论】:
-
为什么你认为编译器不会为那个类合成一个复制构造函数?
-
因为它只执行成员明智的复制。如果我错了,请纠正。
-
执行成员方式的复制是编译器合成的复制构造函数所做的。