《c++ primer 4th》--ch14--重载操作符与转换

1,不能重载的操作符:
[list=A]
[*]:: 显然重载它只会使结构更混乱
[*].* 我觉得应该能够重载才对,毕竟->*是能够被重载的
[*]. 如果允许重载,那么编译器必然会产生混淆:“我是在访问一个成员还是在调用一个重载操作符?”
[*]?: 唯一的三元运算,如果说重载二元运算带来了4的复杂度,那它则会带来9复杂度
[/list]
2,重载操作符必须具有至少一个类类型或枚举类型的操作符,不能重新定义操作内置类型对象的操作符。也就是说操作符是用来扩展C++语言的,而不是用来改变语言的。
3,不要重载具有内置含义的操作符:合成赋值操作符 & , 有短路特征的逻辑操作符
4,类成员与非成员
[list=A]
[*]赋值(=)、下标([])、调用(())、成员访问(->)必须是成员,否则编译报错
[*]与赋值不同,复合赋值不会产生编译错误,可能跟合成赋值操作符(synthesized assignment)有关,编译器需要及早知道合成(synthesize)是否为必须。
[*]改变对象状态的或与给定类型紧密联系的其他一些操作符一般定义为成员
[*]对称的操作,如算术运算,相等,关系,位,最好定义为普通非成员。
[/list]
5,形参和返回值采用传值还是传引用都可以,编译器将重载的操作符当成普通的函数来处理。在返回一个heap对象的reference的时候,它的声明周期很短,并需要手工delete,如果被用在将一个引用和返回的引用绑定起来,那么会产生内存泄漏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值