C++內(nèi)聯(lián)函數(shù)與C語(yǔ)言函數(shù)宏

C++內(nèi)聯(lián)函數(shù)

什么是內(nèi)聯(lián)函數(shù)?

在函數(shù)的聲明和定義前加一個(gè) inline 關(guān)鍵字,這個(gè)函數(shù)就是內(nèi)聯(lián)函數(shù)。

通常會(huì)省略函數(shù)原型,即在聲明的同時(shí)就定義。

內(nèi)聯(lián)函數(shù)原理是什么?

內(nèi)聯(lián)函數(shù)在編譯期,在內(nèi)聯(lián)函數(shù)調(diào)用的地方執(zhí)行了代碼替換。

內(nèi)聯(lián)函數(shù)作用?

執(zhí)行一個(gè)普通的函數(shù)的開銷包括函數(shù)調(diào)用的開銷以及函數(shù)執(zhí)行的開銷。

如果函數(shù)執(zhí)行的開銷遠(yuǎn)小于函數(shù)調(diào)用的開銷,那么省略函數(shù)調(diào)用的開銷將會(huì)提高程序的運(yùn)行效率,這就是內(nèi)聯(lián)函數(shù)存在的意義。因此內(nèi)聯(lián)函數(shù)一般都是比較簡(jiǎn)短的調(diào)用。

但是,如果調(diào)用內(nèi)聯(lián)函數(shù)的地方比較多,那么編譯器會(huì)在每個(gè)調(diào)用的地方生成一個(gè)內(nèi)聯(lián)函數(shù)的副本,這樣內(nèi)存就相應(yīng)的增加了。

例子

#include <iostream>

// inline關(guān)鍵字定義了內(nèi)聯(lián)函數(shù)
inline double square(double x)
{
    return x * x;
}

int main()
{
    int  a = 2;
    double a = square(a++);  // 內(nèi)聯(lián)函數(shù),編譯期執(zhí)行代碼替換,結(jié)果為 3 * 3
    return 0;
}

C函數(shù)宏

C++的內(nèi)聯(lián)函數(shù)執(zhí)行了編譯期的代碼替換,這個(gè)替換動(dòng)作與C的函數(shù)宏有此類似,但不完全一樣.

#include <iostream>
#include <stdio.h>

// C定義的函數(shù)宏
#define SQUARE(X) X*X

// C++定義的內(nèi)聯(lián)函數(shù)
inline double square(double x)
{
    return x * x;
}


int main()
{
    double a = 2;
    double b = SQUARE(a++); // C函數(shù)宏替換,結(jié)果為a++*a++
    printf("b = %f\n", b); // 6.000000

    double c = 2;
    double d = square(c++); // C++內(nèi)聯(lián)函數(shù)替換,結(jié)果為2*2,而不是c++*c++
    std::cout << "d = " << d << std::endl; // 4
    return 0;
}

同樣是求一個(gè)數(shù)的平方,C的函數(shù)宏卻得到了不一樣的結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容