📚
cpp
  • README.md
  • Effective c++
    • 1.让自己习惯c++
    • 2.构造/析构/赋值运算
    • 3.资源管理
    • 4.设计与声明
    • 5.实现
    • 6.继承与面向对象设计
    • 7.模板与泛型编程
    • 8.定制new和delete
  • More effective c++
    • 1.基础议题
    • 2.操作符
    • 3.异常
    • 4.效率
    • 5.技术
    • 6.杂项讨论
  • effective modern c++
    • 1.型别推导
    • 2.auto
    • 3.转向现代c++
    • 4.智能指针
    • 5.右值引用,移动语义和完美转发
    • 6.lambda表达式
    • 7.并发API
    • 8.微调
  • stl源码剖析
  • cpp-concurrency-in-action
Powered by GitBook
On this page
  • 条款05:对定制的类型转换函数保持警觉
  • 条款06:区别increment/decrement操作符的前置和后置形式
  • 条款07:千万不要重载&&,||和,操作符
  • 条款08:了解各种不同意义的new和delete

Was this helpful?

  1. More effective c++

2.操作符

条款05:对定制的类型转换函数保持警觉

这个条款主要说的是,需要注意自动类型转换函数。这可能给你的程序带来意想不到的bug

条款06:区别increment/decrement操作符的前置和后置形式

首先需要知道前置和后置形式的区别,前置操作不会产生新的对象,但是后置操作会产生。所以大多数情况来说,前置操作效率更高。

然后需要注意的是,重载或者自己设置一个类的前置和后置加减操作的时候。需要注意将返回值设置为const,因为c++是不支持这种这种语法的 i++++。所以返回值要设置为const

条款07:千万不要重载&&,||和,操作符

c++能重载很多操作符,但是还是有很多操作符不能被处理。下面列出不能被重载的操作符

. .* :: ?: new delete sizeof typeid static_cast dynamic_cast const_cast reinterpret_cast

那么条款说的这三个操作符有什么特殊性质呢?

&&和||都有个性质,大多数程序员应该都知道,就是短路特性。那么再想一下,如果要重载这个操作符,这种性质能不能体现呢?很显然,不能体现,操作符两遍的参数被计算的时间应该没有先后顺序。加上编译器的优化,很多东西不能保证

,操作符很多人可能不是太明白,这里简单说下他的性质。逗号操作符会先计算逗号左边的表达式,然后是右边,最后的他返回值是右边表达式的结果。

上面3个不建议被重载的操作符都是有先后顺序特性的,所以建议大家不要重载

条款08:了解各种不同意义的new和delete

Previous1.基础议题Next3.异常

Last updated 5 years ago

Was this helpful?

这个条款其实和 effective c++ 中最后一个模块内容重合,所以可以直接看这个链接

8.定制new和delete操作符