C++中的inline(内联)函数

本文探讨了C++中的inline函数,解释了其成为inline候选函数的条件,以及预编译阶段的作用。通过示例展示了inline函数如何类似于宏定义,简化代码并提高效率。同时指出,inline函数的最终决定权在于编译器,并分析了编译器选择inline函数的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

inline函数

什么是inline function?
在class body中完成定义的函数会自动成为inline function的候选人,注意这个词-候选人,最后能不能当选inline还不一定!
在class body外定义的,如果定义前加inline字眼,那它也会成为inline function的候选人。
那就有疑问了,那什么样的函数最后一定会当选inline function呢?我们知道c中的宏定义其实是一种预编译指令,比如#define PI 3.1415926 ,它的作用是预编译阶段将程序中的所有PI 替换成 3.1415926。inline function其实跟这个有异曲同工之妙,比如我们设计了一个people类。

void print(string str);
class People
{
private:

    int age_;
    string name_;
    string country_;

public:

    People(int age, string name, string country)
    :age_(age),name_(name),country_(country)
    {}
    inline void printName()
    {
        print(name_);
    }    
    inline void printCountry()
    {
        print(country_);
    }

};

inline void print(string str)
{
    cout << str << endl;
}

类内的函数,printName() 与 printCountry(),因为写在了类内,因此自动成为 inline 函数的候选人,所以,在前面加 inline 是没啥必要的(当然加上也无所谓)。

类外的函数,print(string str) 函数,因为短小精悍,我们在前面加上 inline 字样,是想让它成为 inline 函数候选人,当然,最后能不能当选 inline 函数,取决于编译器。print 函数如此简单,想必编译器会让它成为 inline 函数的吧。

print(string str) 如果真正成为 inline 函数,在预编译阶段会发生什么?其实上面也说了,inline 函数与宏定义有异曲同工之妙。所以在预编译阶段,上面的printCountry() 函数会预编译为:

inline void printCountry()
    {
        //print(country_);
        cout << str << endl;//替代了上面的函数
    }

这就是 inline 函数的精髓。

不对之处,还望指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值