內聯函數
聲明時使用關鍵字 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;
}
