>[info]# 內置函數
## **內聯函數的需要性**
函數調用與返回時,都需要一定的時間和空間的開銷;而通過關鍵字**inline**將一個函數聲明成內聯函數后,編譯器會將該函數的調用處理成編譯前的代碼替換,而不是象普通函數在編譯時的控制轉移,從而提高了效率.
## **內聯函數的特點**
- 內聯函數的代碼必須在替換之前已經生成,所以內聯函數必須在被調用之前聲明或定義.
- 內聯函數中,不能含有復雜的結構控制語句,如switch,while.
- 內聯函數不能是遞歸函數.
- 內聯函數只適合于只有1~5行的小函數.
## **內聯函數與宏定義**
**宏定義**
```
#define MAX(a,b) ((a)>(b)?(a):(b))
```
- 書寫格式有過分的講究,MAX與括號之間不能有空格,所有的參數都要加括號.
- 求值時會有副作用.
- 不作參數的類型檢查.
**內聯函數**可以有效解決上述問題,替代宏定義.
```
inline int MAX(int a,int b)
{
return a>b?a:b;
}
```
## **例子**
```
#include <iostream>
using namespace std;
inline int max(int,int, int); //聲明函數,注意左端有inline
int main( )
{
int i=10,j=20,k=30,m;
m=max(i,j,k); //編譯前被替換成:if (j>i) i=j;if(k>i) i=k;m=i;
cout<<”max=”<<m<<endl;
return 0;
}
inline int max(int a,int b,int c) //定義max為內置函數
{
if(b>a) a=b; //求a,b,c中的最大者
if(c>a) a=c;
return a;
}
```
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類