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

pep*_*ero 5 c++ overloading assignment-operator c++11

在c ++ 11中,我们可以使用delete禁用复制构造函数和赋值运算符:

class A {
  A(const A&) = delete;
  A& operator=(const A&) = delete;
}
Run Code Online (Sandbox Code Playgroud)

有一天,我的同事使用void返回类型而不是引用。

class A {
  A(const A&) = delete;
  void operator=(const A&) = delete;
}
Run Code Online (Sandbox Code Playgroud)

这个还可以吗?

例如,如果我有

A a, b, c;
a = b = c;
Run Code Online (Sandbox Code Playgroud)

这会工作吗?

Sin*_*all 4

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