拷贝赋值运算符
2023年12月29日 2023年12月31日
copy-assignment operator
赋值运算符重载, 使用赋值运算符 =
为类对象赋值时调用
作为类的成员函数
- 赋值运算符的左侧运算对象绑定到
*this
- 接受一个参数, 是自身类类型的左值引用, 作为右侧运算对象
- 返回
*this
的左值引用
拷贝赋值运算符匹配左值
容器的元素类型通常需要重载赋值运算符
赋值运算符
拥有两个运算对象, 返回左操作数的左值引用
拷贝赋值运算符的两种形式
-
形参为具有底层const的左值引用
1T &operator=(const T &rhs);
right hand side
通常使用这个版本, 具有底层const的左值引用可以用来绑定:
- 左值
最优
- 具有顶层const的左值
非最优
- 右值
非最优
- 左值
-
形参为左值引用
1T &operator=(T &rhs);
较少使用此版本. 是拷贝赋值运算符. 只能接受允许执行写操作的左值
拷贝赋值运算符的合成版本
synthesized copy-assignment operator
如果没有给出拷贝赋值运算符的定义, 编译器会提供拷贝赋值运算符的合成版本
如果拷贝赋值运算符的合成版本不为删除 delete
, 其会将右侧运算对象的每个非static数据成员赋值给左侧运算对象的对应成员
数据成员类型 | 拷贝方式 |
---|---|
类类型 | 使用类的拷贝赋值运算符 |
内置类型 | 直接赋值 |
内置数组 | 逐元素赋值 |