据我所知,用户声明的赋值运算符不同于内置运算符,如this stackoverflow answer所述。但是,为什么要在已删除的运算符上加上“&”呢?
// C++
class MyType
{
public:
// ...
MyType& operator=(MyType const&) & = delete;
MyType& operator=(MyType &&) & noexcept = default;
// more
};
我问是因为我的静态代码检查器在此处报告了违反规则的情况,而且我认为没有理由为已删除的运算符添加“&”。我想念什么吗?
答案 0 :(得分:2)
在这种情况下,没有理由添加&
限定词。
关键是要防止您的课程被复制分配。 &
限定符的目的是防止类的 rvalue 被复制可分配(&
会阻止复制赋值运算符在该函数中成为可行的函数。案件)。但这不是您的目标-您希望 all 副本分配格式错误,所以就这样:
MyType& operator=(MyType const&) = delete;
向写静态检查的人投诉。
问题所在:
MyType& operator=(MyType const&) & = delete;
是您要删除的运算符上的额外精度表明该意图不存在。我立即被问到是否由于某种原因在班上某个地方是否有
MyType& operator=(MyType const&) && { ... }
您不知道,因为那很愚蠢。