多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 內聯函數、默認參數和函數占位參數

內聯函數、默認參數和函數占位參數

來源:程序員人生   發布時間:2015-06-01 08:45:43 閱讀次數:5225次

內聯函數

定義:內聯函數從源代碼層看,有函數的結構,而在編譯后,卻不具有函數的性質。內聯函數不是在調用時產生控制轉移,而是在編譯時將函數體嵌入在每個調用途。編譯時,類似宏替換,使用函數體替換調用途的函數名。1般在代碼中用inline修飾,但是能否構成內聯函數,需要看編譯器對該函數定義的具體處理。

C++中的const常量可以替換宏常數定義,如:

const int A = 3; ? #define A 3

C++中是不是有解決方案替換宏代碼片斷呢?(替換宏代碼片斷就能夠避免宏的副作用!)

C++中推薦使用內聯函數替換宏代碼片斷。

C++中使用inline關鍵字聲明內聯函數。

內聯函數聲明時inline關鍵字必須和函數定義結合在1起,否則編譯器會直接疏忽內聯要求。

#include "iostream" using namespace std; #define MYFUNC(a, b) ((a) < (b) ? (a) : (b)) inline int myfunc(int a, int b) { return a < b ? a : b; } int main() { int a = 1; int b = 3; //int c = myfunc(++a, b); int c = MYFUNC(++a, b); printf("a = %d ", a); printf("b = %d ", b); printf("c = %d ", c); printf("Press enter to continue ..."); system("pause"); return 0; }

說明1:

必須inline int myfunc(inta, int b)和實現的地方,寫在1塊。

說明2:

C++編譯器可以將1個函數進行內聯編譯,被C++編譯器內聯編譯的函數叫做內聯函數;

內聯函數在終究生成的代碼中是沒有定義的;

C++編譯器直接將函數體插入函數調用的地方;

內聯函數沒有普通函數調用時的額外開消(壓棧,跳轉,返回)。

說明3:

C++編譯器不1定準予函數的內聯要求!

說明4:

內聯函數是1種特殊的函數,具有普通函數的特點(參數檢查,返回類型等)。

內聯函數是對編譯器的1種要求,因此編譯器可能謝絕這類要求。

內聯函數由編譯器處理,直接將編譯后的函數體插入調用的地方。

宏代碼片斷由預處理器處理,進行簡單的文本替換,沒有任何編譯進程。

說明5:

現代C++編譯器能夠進行編譯優化,因此1些函數即便沒有inline聲明,也可能被編譯器內聯編譯。

另外,1些現代C++編譯器提供了擴大語法,能夠對函數進行強迫內聯如:g++中的__attribute__((always_inline))屬性。

說明6:

C++中內聯編譯的限制:

不能存在任何情勢的循環語句 ;

不能存在過量的條件判斷語句;

函數體不能過于龐大;

不能對函數進行取址操作;

函數內聯聲明必須在調用語句之前;

編譯器對內聯函數的限制其實不是絕對的,內聯函數相對普通函數的優勢只是省去了函數調用時壓棧,跳轉和返回的開消。因此,當函數體的履行開消遠大于壓棧,跳轉和返回所用的開消時,那末內聯將無意義。

結論:
1)內聯函數在編譯時直接將函數體插入函數調用的地方。

2)inline只是1種要求,編譯器不1定允許這類要求。

3)內聯函數省去了普通函數調用時壓棧,跳轉和返回的開消。

默許參數

C++中可以在函數聲明時為參數提供1個默許值,當函數調用時沒有指定這個參數的值,編譯器會自動用默許值代替。

void myPrint(int x = 3) { printf("x:%d", x); }

函數默許參數的規則:

只有參數列表后臉部分的參數才可以提供默許參數值。

1旦在1個函數調用中開始使用默許參數值,那末這個參數后的所有參數都必須使用默許參數值。

函數占位參數

占位參數只有參數類型聲明,而沒有參數名聲明,1般情況下,在函數體內部沒法使用占位參數。

int func(int a, int b, int ) { return a + b; } int main(int argc, char *argv[]) { printf("func(1, 2, 3) = %d ", func(1, 2, 3)); printf("Press enter to continue ..."); getchar(); return 0; }
轉載請注明:http://blog.csdn.net/lsh_2013/article/details/45421293




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费大片在线观看www | 久久精品一区二区三区不卡牛牛 | 中文字幕乱码视频32 | 亚洲最大福利视频 | 日本不卡在线视频 | 两性午夜欧美高清做性 | 亚洲第一成年网 | 欧美高清3dfreexxxx性 | www.视频| 女bbbbxxxx另类亚洲 | 女人l8毛片a一级毛片免费 | 亚洲欧美日韩中文字幕久久 | 精品国产一区二区三区在线观看 | 337p欧洲亚洲大胆艺术 | 在线观看一区二区三区四区 | 一级特黄女人生活片 | 啪啪午夜 | 欧美成人精品不卡视频在线观看 | 午夜视频在线观看免费观看在线观看 | 波多野结衣免费一区二区三区香蕉 | 欧美亚洲国产另类 | 中文字幕在线观看 | 久久久久久极精品久久久 | 亚洲伊人久久大香线蕉在观 | 337p日本大胆欧美人术艺术精品 | 性久久久久久久久 | 日韩欧美精品一区二区三区 | 亚洲最新色图 | 久草香蕉| freexxxhd性| 亚洲爱爱图 | 免费一级欧美片片线观看 | 456在线| 性欧美video另类hd | 亚洲欧美视频在线播放 | 好吊妞在线成人免费 | 亚洲网站视频在线观看 | 久久一本一区二区三区 | 精品欧美日韩一区二区 | 久爱免费观看在线精品 | 日韩精品欧美亚洲高清有无 |