重载运算符 = 返回 void 是否不可能成为复制赋值运算符

Is it not possible for an overloaded operator= returning void be a copy assignmnent operator?

本文关键字:能成为 复制 赋值运算符 是否 运算符 返回 void 重载      更新时间:2023-10-16

引用 http://en.cppreference.com/w/cpp/language/as_operator 页,复制赋值运算符(编译器在需要时自动生成)返回自身类型的左值引用。

因此,当我定义一个重载运算符时

,如下所示,
void operator=(T& t)

编译器是否仍有可能隐式定义默认的复制赋值运算符?

这是语言标准在 C++11 [class.copy]/17 中指定的复制赋值运算符:

用户声明的复制赋值运算符X::operator=是类X的非静态非模板成员函数,只有一个类型为XX&const X&volatile X&const volatile X&的参数。

返回类型不会影响它是否被视为复制赋值运算符。它仅影响您可以对赋值表达式的结果执行的操作。

C++ 参考(正如您自己发现的那样)声明:

如果没有为类类型(结构、类或联合)提供用户定义的复制赋值运算符,编译器将始终将一个运算符声明为类的内联公共成员。

类 T 的复制赋值运算符是一个非模板非静态成员函数,名称为 operator=,它只接受类型为 T、T&、常量 T&、易失性 T&或常量易失性 T& 的一个参数

换句话说:一旦你声明了自己的复制赋值运算符(它接受一个T&参数),编译器就不会添加一个隐式的。

然而,仍然有一个问题,为什么要返回空白......(C++编码指南建议返回对self的引用)