返回c ++ 11中已删除函数的类型

时间:2017-02-03 10:04:38

标签: c++ c++11 overloading assignment-operator

在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;

这会有用吗?

3 个答案:

答案 0 :(得分:2)

operator=的返回类型是任意的。返回对*thisvoid的引用是常规的。您可以返回int*std::string。传统的解决方案通常更好。

无法调用已删除的函数,并且导出其返回类型的表达式的替换失败次数最少,因此我看不到标准定义的损坏。

编译器可能会或可能不会从空值返回值中提供比参考值更差的诊断。比较两种情况下编译器的a=b=c情况;关于"的噪音无法从空虚"会让我不喜欢从删除的版本中返回void。

答案 1 :(得分:2)

返回类型不是c ++中函数签名的一部分(这也是为什么只能通过返回类型重载函数的原因)。所以没关系,因为在名称查找过程中仍会找到已删除的功能。但是,您可能会收到编译器警告,具体取决于您的编译器版本/设置。

答案 2 :(得分:0)

编译器从选定的重载中推断出返回类型。如果显式删除了重载,则在考虑返回类型之前编译失败。