C ++のインラインとマクロの違い
コンテンツ
マクロは、呼び出し時に展開される命令です。マクロなどの関数も定義できます。同様に、インライン関数も呼び出しの時点で展開します。インライン関数とマクロ関数の主な違いの1つは、 インライン関数 中に展開されます 編集、 そしてその マクロ プログラムが処理されるときに展開されます プリプロセッサ.
比較チャートを使用して、インラインとマクロの違いを調べてみましょう。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | 列をなして | 大きい |
---|---|---|
ベーシック | インライン関数はコンパイラーによって解析されます。 | マクロはプリプロセッサによって展開されます。 |
構文 | インラインreturn_type funct_name(parameters){。 。 。 } | #define macro_name char_sequence |
使用されるキーワード | 列をなして | #define |
定義済み | クラスの内部または外部で定義できます。 | これは常にプログラムの開始時に定義されます。 |
評価 | 引数を1回だけ評価します。 | コードで使用されるたびに引数を評価します。 |
拡張 | コンパイラーは、すべての関数をインライン化および展開しない場合があります。 | マクロは常に展開されます。 |
オートメーション | クラス内で定義された短い関数は、インライン関数に自動的に作成されます。 | マクロは明確に定義する必要があります。 |
アクセス中 | インラインメンバー関数は、クラスのデータメンバーにアクセスできます。 | マクロは決してクラスのメンバーになることができず、クラスのデータメンバーにアクセスできません。 |
終了 | インライン関数の定義は、インライン関数の終わりに中括弧で終了します。 | マクロの定義は新しい行で終了します。 |
デバッグ | コンパイル中にエラーチェックが行われるため、インライン関数のデバッグは簡単です。 | コンパイル中にエラーチェックが発生しないため、マクロのデバッグが困難になります。 |
バインディング | インライン関数は、関数の本文のすべてのステートメントを、関数の本文の開始と終了を中括弧で非常にうまくバインドします。 | マクロは、終了記号がないため、複数のステートメントがある場合、バインドの問題に直面します。 |
インラインの定義
インライン関数は通常の関数のように見えますが、キーワード「列をなして「。インライン関数は、呼び出される代わりに、呼び出しの時点で展開される短い長さの関数です。例でインライン関数を理解しましょう。
#含める 上記のプログラムでは、関数initialize()をクラス「example」のインライン関数として宣言および定義しました。 initialization()関数のコードは、クラス「example」のオブジェクトによって呼び出される場所で拡張されます。クラスの例で定義されている関数display()は、インラインで宣言されていませんが、コンパイラーによってインラインと見なされる場合があります。 C ++では、クラス内で定義された関数は、関数の長さを考慮してコンパイラーによって自動的にインライン化されます。 マクロは「プリプロセッサディレクティブ」です。コンパイルの前に、プログラムはプリプロセッサによって検査され、プログラム内でマクロが見つかると、定義によってそのマクロを置き換えます。したがって、マクロは「置換」と見なされます。例でマクロを勉強しましょう。 #含める 上記のコードで、マクロ関数GREATER()を宣言しました。この関数は、両方のパラメーターのより大きな数を比較して見つけます。マクロは新しい行でのみ終了するため、マクロを終了するセミコロンはありません。マクロは単なる置き換えであるため、マクロが呼び出される場所でマクロのコードを拡張します。 インライン関数は、マクロ関数よりもはるかに説得力があります。 C ++は、「const」キーワードを使用する定数を定義するためのより良い方法も提供します。
マクロの定義
結論: