インライン関数
- 関数呼び出しには時間のオーバーヘッドがあり、関数を呼び出すときに、funcをスタックに置き、終了後にスタックを離れるには、いくつかの指示が必要です。関数の文数が少なく実行が速い場合、関数が何度も呼び出され、オーバーヘッドが非常に大きくなります。
- 関数呼び出しのオーバーヘッドを削減するために、インライン関数メカニズムが導入されています。インライン関数の呼び出しの処理とは、関数呼び出しステートメントを生成せずにコード全体を呼び出しステートメントに挿入することです。
- 欠点:プログラム量の増加
定義:inline int max()
キーワードをインラインで追加
関数のオーバーロード
- 同じ名前で異なるパラメーターが関数のオーバーロードです
- 関数のオーバーロードにより、関数の命名が容易になります
- コンパイラーは、実際のパラメーターの数とタイプに基づいて、使用する関数を決定します
void Max(double a,double b);
void Max(int a,int b);
void Max(double a,double b,double c);
int main()
{
int a=10,b=11;
double r1=5.2,r2=6.3,r3=9.1;
Max(a,b);
Max(r1,r2);
Max(r1,r2,r3);
}
void Max(int a,int b)
{
cout<<"invoking max 1...\n";
if(a>b)
cout<<"Max is "<<a<<endl;
else
cout<<"Max is "<<b<<endl;
}
void Max(double a,double b)
{
cout<<"invoking max 2...\n";
if(a>b)
cout<<"Max is "<<a<<endl;
else
cout<<"Max is "<<b<<endl;
}
void Max(double a,double b,double c)
{
cout<<"invoking max 1...\n";
if(a>b&&a>c)
cout<<"Max is "<<a<<endl;
else if(b>a&&b>c)
cout<<"Max is "<<b<<endl;
else
cout<<"Max is "<<c<<endl;
}
出力結果:
PS。max関数は、iostreamライブラリの関数と競合するため、ここで名前を付けることはできませんか?
関数のデフォルトパラメータ
パラメータを定義する場合、右端のいくつかの連続するパラメータにはデフォルト値があります
void func(int x1, int x2=2, int x3=3);
func(10); //equal to func(10,2,3)
func(10,8); // equal to func(10,8,3)
func(10,8,9); // equal to func(10,8,9)
func(10, ,9) ; //error
- 関数のデフォルトの目的は、プログラムのスケーラビリティを向上させることです
- 作成された関数が新しいパラメーターを追加する必要があり、元の呼び出し関数が新しいパラメーターを使用しない場合は、それらの関数呼び出しステートメントを変更せずに、新しいパラメーターを使用できます。