欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)

 更新時(shí)間:2022年06月03日 09:21:06   作者:Bright-SKY  
為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)

宏函數(shù)(帶參數(shù)的宏)的缺點(diǎn)

第一個(gè)問題:宏函數(shù)看起來像一個(gè)函數(shù)調(diào)用,但是會(huì)有隱藏一些難以發(fā)現(xiàn)的問題。

例如:

#define FUN(x, y) (x * y)
printf("%d", add(3, 3 + 2))    //3 * 3 + 2 = 11

以上情況可以通過加 “()” 解決:

#define FUN(x, y) (x * y)
printf("%d", add(3, (3 + 2)))    //3 * (3 + 2) = 15

特殊情況加()也保證不了參數(shù)的完整性:

#define GET_MAX_DATA(a, b) ((a)>(b)?(a):(b))
void test02()
{
    int a = 3;
    int b = 5;
    //((a)>(++b)?(a):(++b))  無法保證參數(shù)的完整性
    printf("最大值為:%d\n", GET_MAX_DATA(a,++b));//7
}

第二個(gè)問題是c++特有的,預(yù)處理器不允許訪問類的成員,即預(yù)處理器宏不能用作類的成員函數(shù)

內(nèi)聯(lián)函數(shù):內(nèi)聯(lián)函數(shù)為了繼承宏函數(shù)的效率,沒有函數(shù)調(diào)用時(shí)開銷,然后又可以像普通函數(shù)那樣,可以進(jìn)行參數(shù),返回值類型的安全檢查,又可以作為成員函數(shù)

內(nèi)聯(lián)函數(shù):是一個(gè)真正的函數(shù)。函數(shù)的替換 發(fā)生在編譯階段

inline修飾的函數(shù)就是內(nèi)聯(lián)函數(shù)

inline int myAdd(int x, int y)//inline必須出現(xiàn)在函數(shù)的定義處
{
    return x+y;
}

內(nèi)聯(lián)函數(shù)為了繼承宏函數(shù)的效率,沒有函數(shù)調(diào)用時(shí)開銷,然后又可以像普通函數(shù)那樣,可以進(jìn)行參數(shù), 返回值類型的安全檢查,又可以作為成員函函數(shù)。

內(nèi)聯(lián)函數(shù):是在編譯階段 完成的替換。

inline int my_mul(int x,int y)
{
    return x*y;
}
void test01()
{
    cout<<"my_mul = "<<my_mul(10+10,20+20)<<endl;
}

任何在類內(nèi)部定義的函數(shù)自動(dòng)成為內(nèi)聯(lián)函數(shù)。

內(nèi)聯(lián)函數(shù)的特點(diǎn)

1、能保證參數(shù)的完整性

2、有作用域的限制,可以成為類的成員

3、類中的成員函數(shù) 默認(rèn)都是內(nèi)聯(lián)函數(shù)(不用inline)

內(nèi)聯(lián)函數(shù)的要求:

不能存在任何形式的循環(huán)語句 不能存在過多的條件判斷語句 函數(shù)體不能過于龐大 不能對函數(shù)進(jìn)行取地址操作。

內(nèi)聯(lián)僅僅只是給編譯器一個(gè)建議。(具體處理方式由編譯器來決定)

宏函數(shù)和內(nèi)聯(lián)函數(shù)的區(qū)別

宏函數(shù):

預(yù)處理階段完成替換、沒有出入棧的開銷、不能保證參數(shù)的完整性、沒有作用域限制、不能作為類的成員

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

編譯階段完成替換、沒有出入棧的開銷、能保證參數(shù)的完整性、有作用域限制、能作為類的成員

到此這篇關(guān)于C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)的文章就介紹到這了,更多相關(guān)C++內(nèi)聯(lián)函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論