我已经浏览了一段时间来寻找答案,但似乎没有找到。所以我决定在这里专门提出这个问题。
我一直在尝试使用这样的东西(及其变体):
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
的函数,该函数返回 Host
并接受一个函数指针类型的未命名参数(不接受任何内容并返回 NonCopyable
)。
只需将其更改为 Host h{NonCopyable()};
。
关于c++ - 在类成员内 move 右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767131/