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