C++ std::move 混淆

标签 c++ c++11

我对以下代码片段中发生的事情感到困惑。是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/

相关文章:

c++ - 强大的音频库

c++ - 编译时如何输出c++类型信息

c++ - 遍历所有链表的高效算法(C++)

C++模板非类型参数类型推导

c++ - 如何使用 std::next_permutation 强制跳转

c++ - 如何使用 C++ 检查安装在计算机中的 ShellIconOverLayIdentifers 总数

c++ - 此代码是否应引起警告

C++ 使用可变参数模板绑定(bind)成员函数

c++ - std::lock_guard 导致未定义的行为

c++ - 始终将非虚拟方法标记为 final 是个好主意吗?