c++ - 显式默认/删除的函数可以在 ref 限定符上重载吗?

标签 c++ c++11

简介

  • Ref qualifiers :一种消除隐含对象的 rl-valuness 歧义的方法。作为一个简单的例子,以下面的类为例

    class example
    {
      int member;
    public:
      // ...
      int&       value() &;
      //                 ^
      int&&      value() &&;
      //                 ^^
      int const& value() const&;
      //                      ^
    };
    

    使用此 C++11 功能(用 ^ 标记的语法),允许我们控制将用 value() 的版本p>

    • 左值
    • 临时工
    • 常量左值

    实际上 ref 限定适用于类的 *this

  • Defaulted / Deleted functions : 将一个特殊成员函数指定为编译器生成(默认)定义或不可访问(删除)。举个例子

    struct type {
      type(const type&)            = delete;
      type& operator=(const type&) = delete;
    };
    

    上述结构体,实现了不可复制,语义极其清晰

问题

  • 组合这些功能是否可能/有效?
  • 哪些情况是明确禁止不良风格
  • 这种组合是否有任何用例/模式? (例如,快速简便地创建基于 rl-valueness 的条件接口(interface))

最佳答案

是的,但是用处不大,因为构造函数和析构函数不能被引用限定。

您可以引用限定赋值运算符:

struct S {
  S &operator=(const S &) && = default;
};

int main() {
  S s;
  S() = s;  // OK
  s = S();  // error - LHS must be an rvalue
}

但是,我有点无法想象这有什么用。

关于c++ - 显式默认/删除的函数可以在 ref 限定符上重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038462/

相关文章:

c++ - 将参数传递给比较函数?

c++ - Boost元函数类高阶函数

c++ - 保证内存排序和正确的编程实践

c++ - 这种壁垒的做法对吗?

c++ - 让 std::complex<double> 通过 std::is_floating_point 测试

c++ - 关于比较从文件中读取整数的不同方式

c++ - opencv中的白色渐晕

c++ - 使用C++覆盖文件中的文本

c++ - 如何旋转粒子系统使其不绕世界轴旋转

c++ - Opencv imread 不适用于相对路径