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

标签 c++ c++11

假设我设计了一个类,它应该总是只作为右值存在。总是。

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

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

最佳答案

您可以使您的类的所有相关函数都具有右值限定:

struct Foo
{
    void frob(int a, int b) &&;
};

用法:

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

Foo().frob(1, 2);         // Fine

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

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

stay(Foo());   // lvalue

因此,与其担心用户如何获取值,不如限制用户如何使用这些值可能更有效。

关于C++11:有没有办法强制类只能用作右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268896/

相关文章:

c++ - 使用 lambda 函数签名的函数重载

c++ - 如何使用 C/C++ 在 Windows 中获取文件类型图标?

c++ - 为什么没有均匀分布?

c++ - 使用自动成员函数调试符号错误的解决方法?

c++ - 创建一个不可复制的类并继承到我的类中

c++ - 跳过不兼容的 libpcap.so - 交叉编译

Python -> Boost Python + C++ 错误

c++ - 有什么方法可以静态断言模板参数是不可复制的吗?

没有.cpp文件没有内联函数的c++类?

c++ - 从 GCC 4.6 更改为 4.7 时 undefined reference