// inline內(nèi)聯(lián)函數(shù).cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。//1.內(nèi)聯(lián)函數(shù)必須和函數(shù)體寫在一起,只聲明C++編譯器不會(huì)報(bào)錯(cuò),但也不會(huì)把它視為內(nèi)聯(lián)函數(shù)//2.內(nèi)聯(lián)函數(shù)在最終生成的代碼中是沒有定義的//3.C++編譯器會(huì)把函數(shù)體直接插入到函數(shù)調(diào)用的地方//4.內(nèi)聯(lián)函數(shù)沒有普通函數(shù)的開銷(壓棧,跳轉(zhuǎn),返回等等)//5.內(nèi)聯(lián)函數(shù)是一種請(qǐng)求,C++編譯器不一定同意//6.內(nèi)聯(lián)函數(shù)不能存在任何形式的循環(huán)語句,也不能存在過多的條件語句//7.函數(shù)體不能過于龐大//8.不能進(jìn)行取地址操作#include "stdafx.h"#include<iostream>using namespace std;//內(nèi)聯(lián)函數(shù)的寫法inline void PRintfA(){ int a = 10; cout << "a: " << endl;}//這是一個(gè)帶參數(shù)的宏片段#define MYFUNC(a,b) ((a) < (b) ? (a) : (b))//帶參數(shù)的宏標(biāo)識(shí)符和參數(shù)列表要挨著,不能有空格//這是一個(gè)內(nèi)聯(lián)函數(shù)inline int MyFunc(int a, int b){ return a < b ? a : b;}//關(guān)于默認(rèn)參數(shù)和函數(shù)占位符void Fun1(int a, int b, int c = 1, int d = 2)//在參數(shù)列表中,可以賦初值,但是默認(rèn)參數(shù)必須要放在普通參數(shù)的后邊,也不能放中間{ return;}void Fun2(int)//在函數(shù)列表中填入?yún)?shù)類型,但是不填形參,此為函數(shù)占位符{ return;}//默認(rèn)參數(shù)和函數(shù)占位符相結(jié)合void Fun3(int a, int b, int = 1)//同樣也要放在普通參數(shù)的后邊{ return;}int main(){ PrintfA();//內(nèi)聯(lián)函數(shù)的調(diào)用和普通函數(shù)沒有區(qū)別 int a = 1; int b = 3; //int c = MyFunc(++a, b);//結(jié)果為a=2,b=3,c=2,很正常的人腦思維 int c = MYFUNC(++a, b);//使用宏的計(jì)算方法要進(jìn)行宏替換==>((++a)<(b)?(++a):(b));所以++a執(zhí)行了兩次所以后來結(jié)果為//a=3b=3c=3 cout << "a = " << a << endl << "b = " << b << endl << "c = " << c << endl; //關(guān)于Fun1的調(diào)用 Fun1(1, 3);//因?yàn)橛袃蓚€(gè)普通參數(shù),所以調(diào)用的時(shí)候填的實(shí)參最少要兩個(gè),但是最多4個(gè) //關(guān)于Fun2的調(diào)用 Fun2(2);//因?yàn)橛泻瘮?shù)占位符所以實(shí)參不能為空 //關(guān)于Fun3的調(diào)用 Fun3(1, 2); Fun3(1, 2, 3);//事實(shí)證明,寫兩個(gè)參數(shù),三個(gè)參數(shù)都可以 return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注