为什么用ref-qualifier声明一个删除的赋值运算符&

时间:2018-09-21 13:07:18

标签: c++ c++14

据我所知,用户声明的赋值运算符不同于内置运算符,如this stackoverflow answer所述。但是,为什么要在已删除的运算符上加上“&”呢?

// C++
class MyType
{
public:
 // ...

  MyType& operator=(MyType const&) & = delete;
  MyType& operator=(MyType &&) & noexcept = default;

// more
};

我问是因为我的静态代码检查器在此处报告了违反规则的情况,而且我认为没有理由为已删除的运算符添加“&”。我想念什么吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,没有理由添加&限定词。

关键是要防止您的课程被复制分配。 &限定符的目的是防止类的 rvalue 被复制可分配(&会阻止复制赋值运算符在该函数中成为可行的函数。案件)。但这不是您的目标-您希望 all 副本分配格式错误,所以就这样:

MyType& operator=(MyType const&) = delete;

向写静态检查的人投诉。


问题所在:

MyType& operator=(MyType const&) & = delete;

是您要删除的运算符上的额外精度表明该意图不存在。我立即被问到是否由于某种原因在班上某个地方是否有

MyType& operator=(MyType const&) && { ... }

您不知道,因为那很愚蠢。