1

最適化オプション/Ob1を使用してVisualC++プロジェクトをコンパイルする場合、キーワード__inline / inlineを持つ関数、またはクラス定義内で定義された関数のみがインライン化されます(それでも、必ずしもそうではありませんが、コンパイラーが適切であると判断した場合に限ります)。

私の質問は、/ Ob1最適化オプションの下で、クラス定義内で定義されたインラインメソッドではなく、inlineキーワードでインラインで定義された関数のみをインライン化するようにコンパイラー(Visual C ++で)に指示することは可能ですか?

g++コンパイラはWindowsの/Ob1オプションと同じように機能しますか(たとえば、g ++ -O3オプションの下で)、クラス定義内で定義されたインラインメンバーメソッドですか?はいの場合、inlineキーワードを持つクラス定義外の関数のみをインライン化するように指示する方法はありますか?

4

2 に答える 2

5

C ++標準(§7.1.2/ 3)は、クラス定義内で定義された関数が、基本的に単一定義規則に違反しないようにする必要があるため、暗黙的にインラインで宣言されることを指定しています。したがって、あなたが求めているのは、基本的に、インラインで宣言された関数を(暗黙的に)インライン化しないオプションです。関数を(何らかの理由で)インラインで宣言したくない場合は、クラス定義で関数を定義しないでください。

于 2012-12-03T16:09:31.750 に答える
0

#pragma optimize関数ごとに最適化ディレクティブを指定するために使用します:http: //msdn.microsoft.com/en-us/library/chh3fb0k%28v=vs.100%29.aspx

于 2012-12-03T15:54:25.040 に答える