
課程咨詢: 400-996-5531 / 投訴建議: 400-111-8989
認(rèn)真做教育 專心促就業(yè)
在c++中,為了解決一些頻繁調(diào)用的小涵數(shù)大量消耗棧空間或者是叫棧內(nèi)存的問(wèn)題,特別的引入了inline修飾符,表示為內(nèi)聯(lián)涵數(shù)。
可能說(shuō)到這里,很多人還不明白什么是??臻g,其實(shí)??臻g就是指放置程序的局部數(shù)據(jù)也就是函數(shù)內(nèi)數(shù)據(jù)的內(nèi)存空間,在系統(tǒng)下,??臻g是有限的,如果頻繁大量的使用就會(huì)造成因棧空間不足所造成的程序出錯(cuò)的問(wèn)題,涵數(shù)的死循環(huán)遞歸調(diào)用的最終結(jié)果就是導(dǎo)致棧內(nèi)存空間枯竭。
下面我們來(lái)看一個(gè)例子
c++ 代碼
#include
using namespace std;
inline string dbtest(int a); //函數(shù)原形聲明為inline即:內(nèi)聯(lián)涵數(shù)
void main()
{
for (int i=1;i<=10;i++)
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();
}
string dbtest(int a)//這里不用再次inline,當(dāng)然加上inline也是不會(huì)出錯(cuò)的
{
return (a%2>0)?"奇":"偶";
}
上面的例子就是標(biāo)準(zhǔn)的內(nèi)聯(lián)涵數(shù)的用法,使用inline修飾帶來(lái)的好處我們表面看不出來(lái),其實(shí)在內(nèi)部的工作就是在每個(gè)for循環(huán)的內(nèi)部所有調(diào)用dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁調(diào)用函數(shù)對(duì)棧內(nèi)存重復(fù)開(kāi)辟所帶來(lái)的消耗。
說(shuō)到這里很多人可能會(huì)問(wèn),既然inline這么好,還不如把所謂的函數(shù)都聲明成inline,嗯,這個(gè)問(wèn)題是要注意的,inline的使用是有所限制的,inline只適合涵數(shù)體內(nèi)代碼簡(jiǎn)單的涵數(shù)使用,不能包含復(fù)雜的結(jié)構(gòu)控制語(yǔ)句例如while、switch,并且內(nèi)聯(lián)函數(shù)本身不能直接調(diào)用遞歸函數(shù)(自己內(nèi)部還調(diào)用自己的函數(shù))。
說(shuō)到這里我們不得不說(shuō)一下在c語(yǔ)言中廣泛被使用的#define語(yǔ)句,是的define的確也可以做到inline的這些工作,但是define是會(huì)產(chǎn)生副作用的,尤其是不同類型參數(shù)所導(dǎo)致的錯(cuò)誤,由此可見(jiàn)inline有更強(qiáng)的約束性和能夠讓編譯器檢查出更多錯(cuò)誤的特性,在c++中是不推薦使用define的。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!