在 class 成员内移动右值
Moving rvalue inside class member
我浏览了一段时间以寻找答案,但似乎没有找到。所以我决定在这里专门问这个问题。
我一直在尝试使用类似这样的东西(及其变体):
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。这完全可能吗?
注意nc
是一个左值作为命名参数,您需要将其转换为右值,例如通过 std::move
Host(NonCopyable&& nc) : m_nc(std::move(nc)) { }
编辑
有一个 most vexing parse 问题。 Host h(NonCopyable());
不是变量定义,而是函数声明;它声明了一个名为 h
的函数,其中 returns Host
并采用函数指针类型的未命名参数(不带任何参数和 returns NonCopyable
)。
改成Host h{NonCopyable()};
就可以了。
我浏览了一段时间以寻找答案,但似乎没有找到。所以我决定在这里专门问这个问题。
我一直在尝试使用类似这样的东西(及其变体):
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。这完全可能吗?
注意nc
是一个左值作为命名参数,您需要将其转换为右值,例如通过 std::move
Host(NonCopyable&& nc) : m_nc(std::move(nc)) { }
编辑
有一个 most vexing parse 问题。 Host h(NonCopyable());
不是变量定义,而是函数声明;它声明了一个名为 h
的函数,其中 returns Host
并采用函数指针类型的未命名参数(不带任何参数和 returns NonCopyable
)。
改成Host h{NonCopyable()};
就可以了。