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