0
从this文章表示为什么返回值优化发生在这里
当一个无名临时的,不会绑定到任何引用,将被移动 或复制到相同的CV-不合格类型的对象时, 复制/移动被省略。当临时建造时,它是直接在存储中构建的 ,否则它将被移动 或复制到。当无名暂时是声明返回的参数时,这种副本删除的变体称为RVO,“返回值 优化”。
所以为了测试这个概念我尝试了以下实验
class C
{
public:
C()
{
std::cout << "Constructor of C." << std::endl;
}
C(const C &)
{
std::cout << "Copy-constructor of C." << std::endl;
}
};
C func()
{
const C c;
return c; //c is not a nameless and is not CV unqualified as it is a const type.
}
int main(int argc, char **argv)
{
C c = func();
}
输出:章C
Constrcutor我期待: 的构造ç 拷贝构造的Ç C的复制构造函数
我的问题是为什么返回值优化发生在这里?
这仍然不能回答它。返回类型是一个常量,所以它不是cv不合格的,并且返回类型也不是临时的。它在函数中创建并返回。 – MistyD 2014-11-24 04:57:07
@MistyD:返回类型不是常量。你要返回的对象是。但无论如何,这是无关紧要的。该文本并不是说它需要cv不合格。它表示返回的对象的类型(除去了cv限定符)需要与该函数的返回类型相同(删除了cv限定符)。 – 2014-11-24 05:06:59