【发布时间】:2015-04-11 15:15:57
【问题描述】:
我知道 C++11 具有来自此链接的移动语义: Elements of Modern C++ Style
但它没有介绍如何使用移动语义返回向量。如何做到这一点?
【问题讨论】:
标签: c++ c++11 move-semantics copy-elision
我知道 C++11 具有来自此链接的移动语义: Elements of Modern C++ Style
但它没有介绍如何使用移动语义返回向量。如何做到这一点?
【问题讨论】:
标签: c++ c++11 move-semantics copy-elision
像这样:
std::vector<std::string> make_a_vector_of_strings()
{
std::vector<std::string> result;
// just an example; real logic goes here
result.push_back("Hello");
result.push_back("World");
return result;
}
return 语句的操作数符合复制省略的条件,如果复制没有省略,则该操作数被认为是返回类型的移动构造函数,所以一切都尽可能好。
【讨论】:
result 仅在返回语句中移动,因为它是局部变量/参数。如果result 是数据成员(或全局,eww),则不会移动。
result 不是局部变量,代码仍然会做正确的事情,因为那时它会被别名,我们不想在没有别名的情况下偷偷地改变别名值明确要求这样做。