1.inline 函数就是 : 申请对此函数的每一个调用都用 函数本体替换;c++
一个函数可否使用inline主要取决编译器; 总的来慎用inline,好比debug时又若是对一个不存在的函数设置断点, 好比会额外的增长目标代码,好比若是是一个库程序,则须要所有从新编译; 除非相似std::max,std::min 之类的函数 对于函数指针有例外状况 好比:
inline void func(){} void (*pf)() = func; //调用 func() ; //是一个inline调用 pf() ; //仍是函数调用
2.构造析构函数异常与inline函数
*c++保证若是在构造期间有异常,则已经构造好的也会被销毁 结论:构造析构函数不要使用inline 好比:
class Base{ private: std::string s1,s2; }; class Derived : public Base{ public: Derived(){} //空构造 private: std::string s3,s4; };
以上Derived的构造函数在编译后大概是这样的:debug
Derived::Derived(){ Base::Base(); //Base的构造函数也相似下面的代码,构造了s1,s2; try{ s3(); //构造Derived::s3 } catch(...){ Base::~Base(); throw; } try{ s4(); //构造Derived::s4 } catch(...){ Base::~Base(); throw; } }
经过上述代码能够发现,若是Base构造是inline, Derived也是inline的话,
Base的构造函数代码将被插入Derived构造中,意味着Derived中执行4个string构造;
而在调用Derived的地方也将所有替换这些代码, 随着调用的次数越多目标代码将越庞大;指针
最终结论: 是否使用inline ,取决于此函数是否简单到像max/min;最后慎用inline :)code