重载运算符 = 返回 void 是否不可能成为复制赋值运算符
Is it not possible for an overloaded operator= returning void be a copy assignmnent operator?
引用 http://en.cppreference.com/w/cpp/language/as_operator 页,复制赋值运算符(编译器在需要时自动生成)返回自身类型的左值引用。
因此,当我定义一个重载运算符时
,如下所示,void operator=(T& t)
编译器是否仍有可能隐式定义默认的复制赋值运算符?
这是语言标准在 C++11 [class.copy]/17 中指定的复制赋值运算符:
用户声明的复制赋值运算符
X::operator=
是类X
的非静态非模板成员函数,只有一个类型为X
、X&
、const X&
、volatile X&
或const volatile X&
的参数。
返回类型不会影响它是否被视为复制赋值运算符。它仅影响您可以对赋值表达式的结果执行的操作。
C++ 参考(正如您自己发现的那样)声明:
如果没有为类类型(结构、类或联合)提供用户定义的复制赋值运算符,编译器将始终将一个运算符声明为类的内联公共成员。
和
类 T 的复制赋值运算符是一个非模板非静态成员函数,名称为 operator=,它只接受类型为 T、T&、常量 T&、易失性 T&或常量易失性 T& 的一个参数
。
换句话说:一旦你声明了自己的复制赋值运算符(它接受一个T&参数),编译器就不会添加一个隐式的。
然而,仍然有一个问题,为什么要返回空白......(C++编码指南建议返回对self的引用)
相关文章:
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 为什么不能提升::hana::overload_t成为类的成员
- 为什么我不能将 C 样式数组复制到 std::array?
- 怎么能用memcpy复制工会简单的成员?
- C++:不能使运算符<<成为模板嵌套类的好友
- 为什么我不能将元素移动到不可复制的向量中?
- 不能分配 X 类型的对象,因为它的复制运算符隐式删除
- 不能在复制构造函数中隐式调用的方法
- 删除类复制构造函数时,不能使用使用等号表示法的类构造函数
- C++:为什么'this'不能成为 nullptr?
- 为什么完美的转发(全部捕获)不能实现复制分配?
- OpenGL不能成为一个完美的立方体
- 为什么Main不能成为ConstexPr
- 重载运算符 = 返回 void 是否不可能成为复制赋值运算符
- 如果 npos 为 -1,size_type怎么能成为无符号积分
- “f();”怎么能成为下面的声明
- std::is_trivially_copyable - 为什么易失性标量类型不能轻易复制
- 为什么我不能在复制构造函数中更改实例的私有数据,如果它是 const 的?
- 可以随意移动,但不能随意复制
- 如何查找不能成为 Unicode 字符串中单词一部分的字符