我对以下代码片段中发生的事情感到困惑。是move
这里真的有必要吗?返回临时集的最佳且安全的方式是什么?
set<string> getWords()
{
set<string> words;
for (auto iter = wordIndex.begin(); iter != wordIndex.end(); ++iter)
{
words.insert(iter->first);
}
return move(words);
}
我的调用代码只是执行 set<string> words = foo.getWords()
最佳答案
首先,集合不是临时,而是本地。
其次,返回它的正确方法是通过return words;
。
这不仅是您允许返回值优化的唯一方法,而且,在拷贝未完全删除的(不寻常)情况下,局部变量还将绑定(bind)到返回对象的移动构造函数。所以这是一个真正的三赢局面。
关于C++ std::move 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666362/