このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
std::endl
によって不要なフラッシュが生じることがあります
std::endl
がより効率的な \n
の代わりに使用される
説明
この欠陥は、I/O 操作での std::endl
の使用にフラグを設定し、より効率的な代替手段の \n
を使用できるようにします。
リスク
std::endl
は、改行 (\n
) に続けてフラッシュ操作を挿入します。次に例を示します。
std::cout << "Some content" << std::endl;
std::cout << "Some content" << '\n' << std::flush;
std::endl
を使用する複数の I/O 操作が含まれている場合は、暗黙的フラッシュ操作でプログラムのパフォーマンスが大幅に低下する可能性があります。フラッシュ操作は暗黙的なため、パフォーマンスの問題がある場合は、問題の根本原因を追跡することが困難になります。修正方法
\n
を使用して、可能な場合は常に改行を入力します。
フラッシュ操作が必要な場合は、std::endl
の代わりに、次のように、\n
に続けて明示的フラッシュ操作を使用します。
std::cout << "Some content" << '\n' << std::flush;
パフォーマンスの改善の程度は、使用しているコンパイラ、ライブラリ実装、環境によって異なる可能性があります。
例
結果情報
グループ: パフォーマンス |
言語: C++ |
既定値: オフ |
コマンド ライン構文: STD_ENDL_USE |
影響度: Low |
バージョン履歴
R2020a で導入