在c ++ 11中,我们可以使用delete:
禁用复制构造函数和赋值运算符class A {
A(const A&) = delete;
A& operator=(const A&) = delete;
}
有一天,我的同事使用void返回类型而不是引用。
class A {
A(const A&) = delete;
void operator=(const A&) = delete;
}
这个还好吗?
例如,如果我有A a, b, c;
a = b = c;
这会有用吗?
答案 0 :(得分:2)
operator=
的返回类型是任意的。返回对*this
或void
的引用是常规的。您可以返回int*
或std::string
。传统的解决方案通常更好。
无法调用已删除的函数,并且导出其返回类型的表达式的替换失败次数最少,因此我看不到标准定义的损坏。
编译器可能会或可能不会从空值返回值中提供比参考值更差的诊断。比较两种情况下编译器的a=b=c
情况;关于"的噪音无法从空虚"会让我不喜欢从删除的版本中返回void。
答案 1 :(得分:2)
返回类型不是c ++中函数签名的一部分(这也是为什么只能通过返回类型重载函数的原因)。所以没关系,因为在名称查找过程中仍会找到已删除的功能。但是,您可能会收到编译器警告,具体取决于您的编译器版本/设置。
答案 2 :(得分:0)
编译器从选定的重载中推断出返回类型。如果显式删除了重载,则在考虑返回类型之前编译失败。