当我们通过引用从函数中返回一个对象时,我们就会调用一个复制构造函数。
Top& GetRef()
{
Top top(args);
return top;
}
int main()
{
Top top = GetRef();
std::cout << top.property << std::endl;
return 0;
}
问题。是否可以通过引用替换函数的返回,std::move()或者更准确地说,通过rvalue引用返回,这是否正确?这样的更改会被认为比调用复制构造函数更经济吗?
Top&& GetRef()
{
Top top(args);
return std::move(top);
}
int main()
{
Top&& top = GetRef();
return 0;
}
两者都是错误的 - 因为它返回对局部变量的引用,该变量在退出函数时被破坏。
正确的决定——
编译器将为您完成剩下的工作。以及移动和优化的语义,因此它
top甚至会直接在您分配函数调用结果的对象中创建一个对象......“万恶之源是过早优化” (c) Knuth
查看对局部变量的引用的返回,我会添加 - “并且误解了编译器只是尖叫的基本事物”:) 我认为他诚实地警告你你做错了什么......