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&) && { ... }
而你没有,因为那很愚蠢 哪个静态检查器以及假定的违规行为是什么?