c++ inline探索

为什么使用inline函数

       inline函数看起来非常美好。可以使用它们又不用承担调用函数的开销,相比类似功能的宏,inline函数更安全不易出错。inline函数的思想是:对inline函数的每一次调用都用函数本体代替。这样做好处是不需要函数调用开销,坏处是很可能产生代码膨胀。因此:一般对于那些代码简单而又频繁调用的函数通常被声明为inline函数。

隐式inline和显式inline

隐式inline就是将函数定义在类的定义中。

class person
{
    public:
        int age() { return age; }   //age函数被定义于类定义中,因此是一个隐式inline

    private:
        int age;
}

显式inline就是在函数前加上inline关键字。

template<class T> 
inline const T& max(const T& a, const T& b)   //明确申请inline
{
    return (a < b) ? b : a;
}

inline函数必须定义在头文件

inline必须定义于头文件,是因为大部分的构建环境在编译期进行inlining,因此,在源文件调用inline函数的地方,需要知道函数具体长什么样,这样才能进行文本替换。类似的还有template函数,因为编译器在调用template函数的地方需要根据传入的实参实现实例化,因此需要知道template函数长什么样,因此需要在头文件定义它。

inline只是个申请而非强制命令

inline对编译器是一个申请而不是一个强制命令。

如果函数太复杂,编译器很可能拒绝将其inlining。还有一种情况情况是对于虚函数使用inline也会无效,逻辑很清晰:inline是一种编译期进行代码文本替换的行为,而虚函数需要在运行期才能确定调用那个函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值