C++基礎知識整理(関数編)
3597 ワード
一、マクロ関数(パラメータ付きマクロ定義)の欠陥:演算整合性の保証、増加() カッコを付けて++--などの演算を渡す場合でも、エラーが発生する可能性があります(マクロ展開により+--などは一度だけ実行されません) .役割ドメイン を重視しない
二、インライン関数:関数宣言または定義の前にキーワードinlineを付けてコンパイラにその関数を実現する目標コードをその関数を呼び出す文に挿入することを要求し、それによって関数呼び出し時の時間オーバーヘッドを解消し、運行速度を高め、空間交換時間を犠牲にするクラスでメンバー関数を定義すると、その関数はキーワードinline を追加することなく自動的にインライン関数となる.効率が高い条件:1インラインコンパイルは推奨性(registerキーワードのようにinlineはコマンドではなく要求にすぎない)であり、コンパイラによって決定される.2論理が簡単で、頻繁に呼び出される関数はインラインを使用することを提案する.③static変数を含む関数、再帰関数、ループまたはswitch、gotoを含む関数はインライン方式を使用できない.
三、関数のデフォルトパラメータは、関数プロトタイプにおいてパラメータにデフォルト値を付与することができ、デフォルトパラメータを構成する関数 を構成する.関数が呼び出されると、デフォルトの一部またはすべての実際のパラメータが許可され、コンパイラは自動的にデフォルト値を対応する実パラメータ値 として使用します.既存の関数に新しいパラメータを追加するには、既存のコードへの変更を減らすためにデフォルトパラメータに設定することができる .
四、関数の再ロード:C++は2つ以上の関数が同じ関数名を使用することを許可するリロード関数には、異なるパラメータリストが必要です.すなわち、パラメータタイプ(順序を含む)が異なるか、個数が異なるか、個数タイプが異なるか、戻り値が異なる関数のみがリロード を構成することができない.リロード関数の役割ドメインは同じ でなければなりません.が関数パラメータとして参照する場合、constを加えてもconstを付けなくても重荷条件 を構成することができる.関数のリロードと関数のデフォルトパラメータが同時に存在する場合、二義性 を避けることに注意する.
二、インライン関数:関数宣言または定義の前にキーワードinlineを付けてコンパイラにその関数を実現する目標コードをその関数を呼び出す文に挿入することを要求し、それによって関数呼び出し時の時間オーバーヘッドを解消し、運行速度を高め、空間交換時間を犠牲にする
#include
using namespace std;
inline int getMax(int i,int j,int k)
{
int max=0;
if(i>j)
max = i;
else if(k>j)
max = k;
else
max = j;
return max;
}
int main()
{
int a=10,b=20,c=30,n; // : int a=10,b=20,c=30,n;
n= getMax(a,b,c); // int i,j,k;
// i=a;j=b;k=c;
// if(i>j) n = i;
// else if(k>j) n = k;
// else n = j;
cout << n << endl; // cout << n << endl;
return 0;
}
三、関数のデフォルトパラメータ
#include
using namespace std;
//void fun(int i,int j=6,int k);//
void fun(int i,int j=6,int k=8);//
void fun(int i,int j,int k) // ( , )
{
cout << i << j << k;
}
int main()
{
fun(20); // , ,
fun(20,30);
fun(20,30,40);
return 0;
}
四、関数の再ロード:C++は2つ以上の関数が同じ関数名を使用することを許可する
#include
using namespace std;
int getMax(int i,int j,int k); // :-> getMax_int_int_int()
double getMax(double i,double j,double k); // :-> getMax_double_double_double()
int getMax(int i,int j,int k)
{
int max=0;
if(i>j)
max = i;
else if(k>j)
max = k;
else
max = j;
return max;
}
double getMax(double i,double j,double k)
{
double max=0;
if(i>j)
max = i;
else if(k>j)
max = k;
else
max = j;
return max;
}
int main()
{
cout << getMax(2,3,6) << endl;
cout << getMax(3.5,9.5,4.0) << endl; // ,
return 0;
}
/*
: 。
, getMax(), , :
1、 , getMax() , 。
2、 getMax() , 。
*/
#include
using namespace std;
/**
* : a b
*a b
*/
int getMax(int a, int b)
{
return a > b ? a : b;
}
/**
* :
* arr:
* count:
*
*/
int getMax(int arr[],int count = 3)
{
//
int a = arr[0];
for(int i = 1; i < count; i++)
{
//
if(a