C++11 - 在构造函数中 move 基本数据类型?

标签 c++11 move-semantics

我正在研究 C++11 中的 move 语义,我很好奇如何在构造函数中 move bool 值、整数 float 等基本类型。还有复合类型,如 std::string。

以下面的类为例:

class Test
{
public:
    // Default.
    Test()
        : m_Name("default"), m_Tested(true), m_Times(1), m_Grade('B')
    {
        // Starting up...
    }
    Test(const Test& other)
        : m_Name(other.m_Name), m_Times(other.m_Times)
        , m_Grade(other.m_Grade), m_Tested(other.m_Tested)
    {
        // Duplicating...
    }
    Test(Test&& other)
        : m_Name(std::move(other.m_Name)) // Is this correct?
    {
        // Moving...
        m_Tested = other.m_Tested; // I want to move not copy.
        m_Times = other.m_Times; // I want to move not copy.
        m_Grade = other.m_Grade; // I want to move not copy.
    }

    ~Test()
    {
        // Shutting down....
    }

private:
    std::string     m_Name;
    bool            m_Tested;
    int             m_Times;
    char            m_Grade;
};

如何 move (不是复制)m_Tested、m_Times、m_Grade。 m_Name move 正确吗?感谢您抽出时间。

最佳答案

从右值或 xvalue 原语对原语进行初始化和赋值与从左值原语进行初始化或赋值具有完全相同的效果;该值被复制,源对象不受影响。

换句话说,您可以使用 std::move 但不会有任何区别。

如果您想更改源对象的值(例如,更改为 0),您必须自己执行此操作。

关于C++11 - 在构造函数中 move 基本数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24800857/

相关文章:

c++ - 根据另一个可变参数包查找可变参数包的收缩

c++ - return 语句何时需要显式 move ?

c++ - move std::vector 时出现段错误

c++ - std::move 和映射赋值

c++ - move 省略优化

c++ - C++11 在 Visual Studio 2017 中可用吗?

c++ - 从调用的可调用目标将 std::function 设置为 nullptr

c++ - duration_cast 怎么轮

c++ - 是否有一个不会被省略的 move 构造的简单示例?

c++ - 正则表达式无法从字符串中提取双参数子字符串