透彻了解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函数都束手无策。