玩命加载中 . . .

14.1-基本概念


14.1 基本概念

当一个重载的运算符是成员函数时,this绑定到左侧运算对象,成员运算符函数的参数数量比运算对象的数量少一个

不能被重载的运算符:::.*.?:

data1 + data2;  // 普通的表达式
operator+(data1, data2);    // 等价的函数调用
data1 += data2;     // 基于调用的表达式
data1.operator+=(data2);    // 对成员运算符函数的等价调用

逻辑与&&和逻辑或||运算符的重载版本也无法保留内置运算符的短路求值属性,两个运算对象总是会被求值。所以不建议重载

通常不应该重载逗号、取地址、逻辑与和逻辑或运算符

应该定义为成员函数:

  • 赋值=、下标[]、调用()和成员访问箭头->运算符必须是成员
  • 复合赋值运算符一般应该是成员
  • 改变对象状态的运算符或者与给定类型密切相关的运算符,如递增、递减和解引用运算符,通常应该是成员

应该定义为普通的非成员函数

  • 具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等,通常是普通的非成员函数

当把运算符定义成成员函数时,左侧对象必须是运算符所属类的一个对象

string s = "world";
string t = s + "!";     // 正确,string加一个const char*
string u = "hi" + s;    // Err,+是string的成员函数

文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录