在类成员中移动rvalue

时间:2017-10-16 09:35:16

标签: c++ c++11 move rvalue most-vexing-parse

我已经浏览了一段时间寻找答案,但我似乎没有找到答案。所以我决定在这里专门提问。

我一直在尝试使用这样的东西(及其变体):

struct NonCopyable
{
    NonCopyable() { };
    NonCopyable(const NonCopyable& other) = delete;
    NonCopyable(NonCopyable&& other) {  };
};

struct Host
{
    Host(NonCopyable&& nc) : m_nc(nc) { }
    NonCopyable m_nc;
};

实现这一目标:

Host h(NonCopyable());

换句话说,我想在m_nc中构造NonCopyable。这有可能吗?

1 个答案:

答案 0 :(得分:4)

请注意,<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <span id="myid" >{{property}}</span>是一个左值作为命名参数,您需要将其转换为右值,例如:通过std::move

nc

修改

有一个most vexing parse问题。 Host(NonCopyable&& nc) : m_nc(std::move(nc)) { } 不是变量定义,而是函数声明;它声明了一个名为Host h(NonCopyable());的函数,它返回h并获取一个带有函数指针类型的未命名参数(它不带任何内容并返回Host)。

只需将其更改为NonCopyable