C++ 言語の規則では、C++ は、次の条件のうち 1 つがあてはまる場合にインライン化します。
関数が inline キーワードを使用して定義されている
関数がクラス定義の中に (宣言されているだけでなく) 定義されている
関数がコンパイラで生成されたクラスメンバー関数である
C++ 言語の規則では、呼び出しを実際にインライン化するかどうかをコンパイラが選択します。ただし、次の場合を除きます。
関数が複雑すぎる、
+d オプションが選択されている、または
-g オプションが選択されている
デフォルトでは、コンパイラは次のコード例で関数 f() と memf2() をインライン化できます。また、クラスには、コンパイラによって生成されたデフォルトのコンストラクタとコンパイラでインライン化できるデストラクタがあります。+d を使用すると、コンパイラでコンストラクタ f() とデストラクタ C::mf2() はインライン化されません。
inline int f() {return 0;} // おそらくインライン化される class C { int mf1(); // インライン定義が出現するまではインライン化されない int mf2() {return 0;} // おそらくインライン化される }; |
デバッグオプション -g を指定すると、このオプションが自動的に有効になります。
-g0 デバッグオプションでは、+d は有効になりません。
+d オプションは、-x04 または -x05 を使用するときに実行される自動インライン化に影響を与えません。
-g0、-g