`
xiongx
  • 浏览: 13378 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

《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,
    分享到:
    评论

    相关推荐

    Global site tag (gtag.js) - Google Analytics