《More Effective C++》读书笔记

1、指针和引用的使用场景

确定变量永远不会为空且不会作为其他变量的代表时用引用;变量有可能会为空或者在不同的时间会指向不同的对象时用指针。

2、类型装换最好使用C++转型操作符

static_cast  基本类型之间的转换

const_cast  常量转非常量(去除常量属性)

dynamic_cast  继承体系中父类与子类之间的安全转型,失败返回NULL

reinterpret_cast  任意类型之间的转换 常用于转换函数指针类型。

3、不以多态方式处理数组。

4、非必要不提供默认构造函数

会导致class对象内的成员变量没有初始化值。

5、最好不用 定制的类型转换函数 (operator type()),如有需要,直接写一个专门转型的函数。

6、区别前置后置的++,--,重载时后置++最好返回const,带一个不被使用的参数和前置++区别。

7、不重载&& || , 3个操作符。

8、operator new和new operator是不一样的 

operator new分配内存并调用构造,new operator 只分配内存。

9、函数参数和异常参数的区别:

a>catch子句一定会发生复制行为且比较慢

b>调用函数正常情况下控制权在调用端,抛出异常后控制权不再属于抛出端。

c>throw;  throw e;  尽量使用throw;  后者抛出的是参数的副本,如果参数有继承体系,可能会改变抛出的类型。

d>函数调用时不允许传递临时对象的引用,但是抛出异常可以。

e>隐式类型转换只发生于函数中,异常并不会有隐式的类型转换,如double类型的catch子句不会捕捉int类型的异常,异常有两种转换:继承架构中的类转换和有型指针到无型指针的转换。

异常会使得程序代码量增加并且效率下降,故异常一定要在必要的地方使用,不滥用,抛出真正的异常。

mutable 关键字 修饰的变量可以在任何成员函数内被修改,即使是常成员函数

10、缓式评估 类似于string的写时拷贝 

11、超急评估 使用局部缓存将昂贵的动作 如“数据库查询”转换成“内存数据结构查询”。

18、分期摊还所需要的计算成本,类似于计算机在读取vector时的缓存,提前加载先前读取过位置附近的数据。

19、临时对象的来源

a>函数形参实参类型不吻合,如传入char数组,形参为string,在传参过程中会产生临时对象,非常引用参数不允许产生临时参数

b>函数返回对象,很多时候不能避免

21、适当利用函数重载避免隐式类型转换

22、复合类型操作符比独身操作符效率高,因为不产生临时对象的构造和析构 如+=好于+

23、含有虚函数的类的每个对象都有一个虚函数指针,虚函数不能是内联函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值