作为const引用参数传递的类的移动成员

问题描述 投票:0回答:3

正在考虑:

template <typename... Args>
ResourceHolder& operator+=(const ResourceInserter<Key, Args...>& inserter) {

    if constexpr (sizeof...(Args) == 0) {
        insert(std::move(inserter.key),
               std::move(inserter.fileName));
    } else {
        insert(std::move(inserter.key),
               std::move(inserter.fileName),
               std::move(std::get<Args...>(inserter.tuple)));
    }

    return *this;
}

您认为这是对移动语义的正确用法吗?

inserterResourceInserter实例作为const引用传递。

c++ c++11 move-semantics stdtuple
3个回答
2
投票
移动const对象通常是一个简单的副本(除非重载Object(const Object&&),所以您对std::move的使用似乎无用。

1
投票
没有

1
投票
与它的名字相反,std::move实际上不移动任何东西。它仅告诉编译器尝试移动(即,通过将对象t强制转换为右值引用类型[更具体地讲,xvalue expression]来指示它可以“从中移出”)。但是,您的类没有接受const inserter&&的构造函数,它将使用copy constructor并安全地复制。
© www.soinside.com 2019 - 2024. All rights reserved.