C++ 11:有没有办法强制类只能用作右值?

Gab*_*iMe 1 c++ c++11

假设我设计了一个类,它应该始终只作为rvalue存在.总是.

确保此类实例永远不会作为左值出现在代码中的最佳方法是什么?

如果没有这种方式,最接近的方法是什么?

Ker*_* SB 5

您可以使您的班级rvalue-qualified的所有相关功能:

struct Foo
{
    void frob(int a, int b) &&;
};
Run Code Online (Sandbox Code Playgroud)

用法:

Foo x;
// x.frob(1, 2);          // Error
std::move(x).frob(1, 2);  // Fine

Foo().frob(1, 2);         // Fine
Run Code Online (Sandbox Code Playgroud)

所陈述的问题并没有多大意义,因为您可以在任何上下文中创建任何值类别,与任何类型的设计无关.例如:

template <typename T> T & stay(T && x) { return x; }

stay(Foo());   // lvalue
Run Code Online (Sandbox Code Playgroud)

因此,不要担心用户如何获取价值,而是限制用户如何使用这些价值可能更有效.

  • `x` 是一个左值...这不算吗? (2认同)
  • @GabiMe:特殊成员函数是特殊的,将它们视为普通成员函数通常没有意义.自然`{const X x; 应该工作,你不能对析构函数进行const限定,只是举一个例子.你应该描述你真正的问题,而不是急于想到你认为的解决方案. (2认同)