据我所知,用户声明的赋值运算符与内置运算符不同,如所解释的这个 stackoverflow 答案 https://stackoverflow.com/a/16995559/3054219。但是为什么要在已删除的运算符中添加“&”呢?
// C++
class MyType
{
public:
// ...
MyType& operator=(MyType const&) & = delete;
MyType& operator=(MyType &&) & noexcept = default;
// more
};
我问这个问题是因为我的静态代码检查器报告了此处的规则违规,并且我认为没有理由为已删除的运算符添加“&”。我错过了什么吗?
没有理由添加&
在这种情况下是限定符。
关键是要防止你的类被复制分配,就这样。目的&
限定符是为了防止rvalue您的班级的可复制分配(&
在这种情况下会阻止复制赋值运算符成为可行的函数)。但这不是你的目标——你想要all复制分配格式不正确,所以这就是:
MyType& operator=(MyType const&) = delete;
并向编写静态检查的人抱怨。
问题在于:
MyType& operator=(MyType const&) & = delete;
您要删除的运算符的额外精度是否暗示了不存在的意图。我立即想到,在课程稍后的某个地方,出于某种原因,你是否有:
MyType& operator=(MyType const&) && { ... }
但你不这样做,因为那很愚蠢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)