文章目录
运算符重载
重载运算符函数,本质上还是函数调用,所以重载后:
- 可以是调用运算符的方式调用,
data1 + data2
- 也可以是调用函数的方式调用,
operator+(data1, data2)
,这就需要注意运算符函数的名字是operator运算符
,在可以重载的运算符里有 逗号、取地址、逻辑与、逻辑或
不建议重载
逗号、取地址、本身就对类类型有特殊定义;逻辑与、逻辑或,有短路求值属性;逗号、逻辑与、逻辑或,定义了求值顺序
运算符重载应该是作为类的成员函数 或者 非成员函数
注意:
重载运算符,它本身是几元就有几个参数,对于二元的,第一个是左侧运算对象,第二个是右侧运算对象。 **然后,对于类成员函数的第一个参数隐式绑定了this指针,**所以运算符如果是类的成员函数,左侧运算对象就相当于固定是this。
一些规则:
(1)算数和关系运算符建议非成员
因为这些运算符是对称的,复合赋值运算符 建议成员
(2)赋值运算符必须成员。复合运算符建议成员
(3)下标运算符必须成员
返回访问元素的引用,简历两版本(常量、非常量)
(4)递增递减运算符,建议成员
因其会改变对象的状态。 解引用(*)减一成员。箭头(->)必须成员
函数调用运算符:
lambda是函数对象。编译器是将lambda表达式翻译为一个未命名的对象,[捕获列表](参数列表){函数体}
对应类中重载调用运算符的参数列表、函数体、捕获列表的内容就对应类中的数据成员。所以捕获列表,值传递时,要拷贝并初始化那些数据成员,引用传递就是直接用。