可以在ref限定符上明确默认/删除函数重载吗?

时间:2014-06-04 13:13:49

标签: c++ c++11

INTRO

  • Ref qualifiers:一种消除隐含对象的rl-valuness的方法。作为一个简单的例子,请参加以下课程

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

    使用此C ++ 11功能(标有^的语法),允许我们控制将使用

    调用的value()版本
    • 1-值
    • temporaries
    • const l-values

    实际上,参考资格适用于classe的*this

  • Defaulted / Deleted functions:指定特殊成员函数,因为编译器已生成(默认)定义或无法访问(删除)。举个例子吧

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

    上述结构实现了不可复制且语义非常清晰

问题

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

1 个答案:

答案 0 :(得分:4)

是的,但没有多大用处,因为构造函数和析构函数不能被重新限定。

您可以对赋值运算符进行ref-qualified:

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

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

但是,我有点不知道这会有什么用处。