C++中运算符重载需要注意什么?

c++ - Operator overloading - Stack Overflow这篇FAQ讲的很清楚,把要点整理如下:

C++中operator重载的基本语意:

  1. 只能重载用户定义类型的operator。
  2. 以下operator不能重载:.,::,sizeof,?:
  3. 其余的都能重载,分别是:
    1. 算数运算符:二元:+ - * / %  += -= *= /= %=,一元:+ - ++ --
    2. 位运算符:二元 & | ^ << >> and &= |= ^= <<= >>= ;一元 ~
    3. 布尔运算符:二元:== != < > <= >= || &&, 一元!
    4. 地址管理:new new[] delete delete[]
    5. 显示转换运算符
    6. 其它:二元:= [] ->,一元:* &,函数调用: ()

三个基本原则:

  1. 如果operator的含义模糊不清,就不要重载,用一个函数名清楚的函数替代
  2. 永远坚持operator众所周知的语意
  3. 永远提供相关的运算符重载,比如重载了+,就要重载+=

运算符实现成员还是非成员

  1. 赋值运算符=,数组下标运算符[],成员访问运算符->和函数调用运算符()必须是成员内的。
  2. 如果需要修改左操作数,通常实现在非成员,比如<<和>>。
  3. 对于别的,遵守下面的规则:
    1. 如果是一元运算符,成员
    2. 如果二元运算符,左右操作数对等,非成员
    3. 如果二元运算符,左右操作数不对等,成员

转载于:https://www.cnblogs.com/fresky/archive/2012/12/05/2804026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值