《Effective C++》条款30

透彻了解inlining的里里外外

1.inline对编译器只是一个建议,并不会强制执行。

2.成员函数默认被打上了inline的标签。

3.inlining大多数是编译期间行为,如果该类函数声明与定义分离会导致报错。

4.带有循环或者递归的函数太过复杂不适合作为inlining.

5.无法对virtual函数声明为lnilning,因为virtual意味着在运行期才调用

6.不要对构造函数或者析构函数进行inlining。虽然或许你的构造函数是空的,看起来很简单适合inlining,但是C++对于“对象被创建和销毁时发生了什么事”做了各种各样的保证。当你使用new或者delete,会自动调用构造和析构。如果期间有异常被抛出,该对象已经构造好的那一部分会被自动销毁......你的程序内一定有某些代码让那些事情发生,而那些代码——由编译器于编译期间代为产生并安插到你的程序中的代码——肯定存在于某个地方,或许有时就在构造函数内。内部包括了异常处理和调用基类构造或者析构的一些代码。

7.inline函数无法随着程序库的升级而升级。 inline函数被编进程序中,如果程序库设计者决定改变它,那么所有用到它的客户端程序都得改变,必须重新编译。但是non-inline函数只需要重新连接就好。

8.大部分调试器对inline函数都束手无策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值