緣由
程序調(diào)用函數(shù)時(shí)步驟過(guò)于繁瑣它掂,導(dǎo)致運(yùn)行效率低下巴帮,故引入inline函數(shù)。
格式
inline 函數(shù)聲明或定義語(yǔ)句
對(duì)象中inline函數(shù)使用
錯(cuò)誤例子
//a.h
inline void f(int a, int b);
//a.cpp
inline void f(int a, int b)
{
return a+b;
}
//main.cpp
#include 'a.h'
int main()
{
f(10,10);
//報(bào)錯(cuò)虐秋,此時(shí)編譯器進(jìn)入a.h文件后只找到f函數(shù)的inline聲明晰韵,并未找到f函數(shù),無(wú)法調(diào)用
return 0;
}
實(shí)際使用
應(yīng)當(dāng)在a.h中將f函數(shù)的body一塊放入熟妓,即無(wú)須在a.cpp中作額外定義(若在a.cpp中依然做定義雪猪,則編譯時(shí)程序會(huì)因?yàn)橹貜?fù)定義而報(bào)錯(cuò),導(dǎo)致無(wú)法通過(guò))起愈,此時(shí)編譯通過(guò)只恨。
inline函數(shù)的實(shí)際功能
即在一個(gè)地方調(diào)用inline函數(shù)時(shí)译仗,實(shí)際是編譯器將整個(gè)inline函數(shù)的代碼放入該調(diào)用的地方,使得程序能直接調(diào)用該函數(shù)進(jìn)行計(jì)算官觅。
在類(lèi)中的inline
只要在類(lèi)中直接定義給出了body的函數(shù)纵菌,程序默認(rèn)其為inline函數(shù)。如果只聲明休涤,而在類(lèi)外要進(jìn)行定義(同一個(gè).h文件)使其為inline函數(shù)咱圆,則必須在定義時(shí)在前加上inline。
注意
-
何時(shí)使用
當(dāng)需要效率而對(duì)空間占用沒(méi)有過(guò)多要求的時(shí)候可以使用inline函數(shù)功氨。
-
類(lèi)中何時(shí)直接定義
當(dāng)所寫(xiě)函數(shù)代碼較短時(shí)可直接在類(lèi)中給出body序苏。
-
何時(shí)不能使用
當(dāng)函數(shù)為遞歸時(shí),編譯器不會(huì)把其當(dāng)成inline函數(shù)捷凄,對(duì)于非常大的函數(shù)(一般超過(guò)二十行)忱详,編譯器也會(huì)拒絕其為inline函數(shù)。