六一的部落格


关关难过关关过,前路漫漫亦灿灿。



copy-assignment operator

赋值运算符重载, 使用赋值运算符 = 为类对象赋值时调用

作为类的成员函数

  • 赋值运算符的左侧运算对象绑定到 *this
  • 接受一个参数, 是自身类类型的左值引用, 作为右侧运算对象
  • 返回 *this 的左值引用

拷贝赋值运算符匹配左值

容器的元素类型通常需要重载赋值运算符


赋值运算符

拥有两个运算对象, 返回左操作数的左值引用


拷贝赋值运算符的两种形式

  1. 形参为具有底层const的左值引用

    1T &operator=(const T &rhs); 
    

    right hand side

    通常使用这个版本, 具有底层const的左值引用可以用来绑定:

    • 左值 最优
    • 具有顶层const的左值 非最优
    • 右值 非最优
  2. 形参为左值引用

    1T &operator=(T &rhs); 
    

    较少使用此版本. 是拷贝赋值运算符. 只能接受允许执行写操作的左值


拷贝赋值运算符的合成版本

synthesized copy-assignment operator

如果没有给出拷贝赋值运算符的定义, 编译器会提供拷贝赋值运算符的合成版本

如果拷贝赋值运算符的合成版本不为删除 delete , 其会将右侧运算对象的每个非static数据成员赋值给左侧运算对象的对应成员

数据成员类型 拷贝方式
类类型 使用类的拷贝赋值运算符
内置类型 直接赋值
内置数组 逐元素赋值

拷贝赋值运算符


copy-assignment operator

赋值运算符重载, 使用赋值运算符 = 为类对象赋值时调用

作为类的成员函数

  • 赋值运算符的左侧运算对象绑定到 *this
  • 接受一个参数, 是自身类类型的左值引用, 作为右侧运算对象
  • 返回 *this 的左值引用

拷贝赋值运算符匹配左值

容器的元素类型通常需要重载赋值运算符


赋值运算符

拥有两个运算对象, 返回左操作数的左值引用


拷贝赋值运算符的两种形式

  1. 形参为具有底层const的左值引用

    1T &operator=(const T &rhs); 
    

    right hand side

    通常使用这个版本, 具有底层const的左值引用可以用来绑定:

    • 左值 最优
    • 具有顶层const的左值 非最优
    • 右值 非最优
  2. 形参为左值引用

    1T &operator=(T &rhs); 
    

    较少使用此版本. 是拷贝赋值运算符. 只能接受允许执行写操作的左值


拷贝赋值运算符的合成版本

synthesized copy-assignment operator

如果没有给出拷贝赋值运算符的定义, 编译器会提供拷贝赋值运算符的合成版本

如果拷贝赋值运算符的合成版本不为删除 delete , 其会将右侧运算对象的每个非static数据成员赋值给左侧运算对象的对应成员

数据成员类型 拷贝方式
类类型 使用类的拷贝赋值运算符
内置类型 直接赋值
内置数组 逐元素赋值