'ステートメント' が含まれている関数はインライン展開されません(W8027) (C++)
(この警告を無効にするコマンドライン オプションは -w-inl です)
対象:
"ステートメント' とは以下のいずれかです。
- スタティック変数
- 集約初期化子
- 一部の return 文
- ローカル デストラクタ
- 一部の if 文
- ローカル クラス
- 欠落した return 文
- 以下の「予約語」セクションに一覧されている予約語
予約語
以下の予約語のいずれかが含まれている関数は、たとえ inline 指定されている場合でも、インライン展開できません。
asm |
except |
break |
finally |
case |
for |
continue |
goto |
defaults |
switch |
do |
while |
それでも関数自体は文法的には完全に正しいですが、通常のスタティック(非グローバル)関数として扱われます。
各コンパイル ユニットでは、関数の呼び出し位置にその関数のコピーが現れます。
説明
インライン関数が複雑になりすぎる場合、コンパイラはそれをインライン展開できません。もっとも、関数が非常に複雑なので、それをインライン展開してもパフォーマンスは大幅に向上しそうにありません。
ローカル デストラクタの場合
コンパイラでインライン展開が無効になっているインライン関数を作成した場合に出力される警告です。この警告は無視することができ、関数は非インラインで生成されます。