內聯函數
聲明時使用關鍵字 inline
。
編譯時在呼叫處用函數體進行替換,節省了參數傳遞、控制轉移等開銷。
注意:
- 內聯函數體內不能有循環語句和
switch
語句; - 內聯函數的定義必須出現在內聯函數第一次被呼叫之前;
- 對內聯函數不能進行異常接口聲明。
例3-14:內聯函數應用舉例
#include <iostream> using namespace std; const double PI = 3.14159265358979; inline double calArea(double radius) { return PI * radius * radius; } int main() { double r = 3.0; double area = calArea(r); cout << area << endl; return 0; }
帶默認參數值的函數
可以預先設置默認的參數值,呼叫時如給出實參,則採用實參值,否則採用預先設置的默認參數值。
例如:
int add(int x = 5, int y = 6) { return x + y; } int main() { add(10, 20); // 10 + 20 add(10); // 10 + 6 add(); // 5 + 6 }
默認參數值的說明次序
有默認參數的形參必須列在形參列表的最右,即默認參數值的右面不能有無默認值的參數
呼叫時實參與形參的結合次序是從左向右
例:
int add(int x, int y = 5, int z = 6); // 正確 int add(int x = 1, int y = 5, int z); // 錯誤 int add(int x = 1, int y, int z = 6); // 錯誤
默認參數值與函數的呼叫位置
如果一個函數有原型聲明,且原型聲明在定義之前,則默認參數值必須在函數原型聲明中給出;而如果只有函數的定義,或函數定義在前,則默認參數值需在函數定義中給出。
例:
int add(int x = 5, int y = 6); // 只有定義,沒有原型聲明 int main() { add(); } int add(int x = 5, int y = 6); // 原型聲明在前 int main() { add(); } int add(int x, int y) { // 此處不能再指定默認值 return x + y; }
例3-15:計算長方體的體積
函數 getVolume
計算體積
有三個形參:length
(長)、width
(寬)、height
(高),其中 width
和 height
帶有默認值。
主函數中以不同形式呼叫 getVolume
函數
#include <iostream> #include <iomanip> using namespace std; int getVolume(int length, int width = 2, int height = 3); int main() { const int X = 10, Y = 12, Z = 15; cout << "某些箱子的資料: "; cout << getVolume(X, Y, Z) << endl; cout << "某些箱子的資料: "; cout << getVolume(X, Y) << endl; cout << "某些箱子的資料: "; cout << getVolume(X) << endl; return 0; } int getVolume(int length, int width, int height) { cout << setw(5) << length << setw(5) << width << setw(5) << height << '\t'; return length * width * height; }