C++ 为什么使用ref限定符声明已删除的赋值运算符&;

C++ 为什么使用ref限定符声明已删除的赋值运算符&;,c++,c++14,C++,C++14,据我所知,用户声明的赋值运算符不同于内置运算符,如所述。但为什么要将“&”添加到已删除的运算符中 // C++ class MyType { public: // ... MyType& operator=(MyType const&) & = delete; MyType& operator=(MyType &&) & noexcept = default; // more }; 我之所以这样问,是因为我的静态代码检查器在

据我所知,用户声明的赋值运算符不同于内置运算符,如所述。但为什么要将“&”添加到已删除的运算符中

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

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

// more
};

我之所以这样问,是因为我的静态代码检查器在这里报告了一个违反规则的情况,我认为没有理由为已删除的运算符添加“&”。我遗漏了什么吗?

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

关键是防止类被复制分配,句号。
&
限定符的目的是防止类的右值是可复制赋值的(在这种情况下,
&
将阻止复制赋值运算符成为可行的函数)。但这并不是你的目标——你希望所有的复印作业都是格式错误的,所以这只是:

MyType& operator=(MyType const&) = delete;
并向写静态检查的人投诉


问题在于:

MyType& operator=(MyType const&) & = delete;
你要删除的操作符的额外精度暗示了一个不存在的意图。我马上就想知道,在课堂上的某个地方,出于某种原因,你是否:

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

而你没有,因为那很愚蠢

哪个静态检查器以及假定的违规行为是什么?