日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

內聯函數

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

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

const int A = 3; ? #define A 3

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

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




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久国产精品一区 | 高清国产一区 | 国产三级一区 | 亚洲精品久久久久久一区二区 | 在线免费观看av网站 | 亚洲毛片 | 国产中文一区二区三区 | 国产热re99久久6国产精品 | 日本免费视频 | 国产精品一区二区精品视频免费看 | 九一精品 | 欧美久久一区 | 欧美日韩精品在线观看 | 8x拔播拔播国产在线视频 | 国产精品一区二区三区四区五区 | 成人教育av| 日韩一区二区三区在线视频 | 国产成人综合亚洲 | 男女网站在线观看 | 嫩草视频国产精品 | 日韩欧美小视频 | 欧美性爽| 成人午夜精品 | av一区二区三区在线播放 | 国产精品视频久久 | 精品91 | 成人国产一区 | 黄在线网站 | 久久九九 | 亚洲成人一二三 | 美女搡bbb又爽又猛又黄www | 久久综合国产 | 激情视频一区二区三区 | 欧美理论在线观看 | 在线播放国产精品 | 日韩一区二区三区精品 | 亚洲一区二区三区精品视频 | 热久久免费视频 | 操网| 国产精品美女久久久久aⅴ国产馆 | 黄色大片在线免费看 |