このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
計算量の多いローカル変数のコピー
説明
この欠陥は、ローカル変数が const
参照からのコピーで作成された後、変更されない場合に発生します。
たとえば、変数 name
は、関数 get_name
によって返された const
参照からのコピーで作成されます。
const std::string& get_name(); ... void func { std::string name = get_name(); }
2 * sizeof(void *)
より大きいトリビアル コピー可能な型である場合のみです。リスク
変数が const
参照から作成され、変更されない場合は、変数自体を const
参照として定義できます。const
参照を作成すると、計算量が多くなる可能性のあるコピー操作が回避されます。
修正方法
ローカル変数を後で変更する意図がない場合は、const
参照からのコピーによる新しいローカル変数の作成を避けます。代わりに const
参照を作成します。
たとえば、前のセクションでの変数 name
は次のように再定義できます。
const std::string& get_name(); ... void func { const std::string& name = get_name(); }
パフォーマンスの改善の程度は、使用しているコンパイラ、ライブラリ実装、環境によって異なる可能性があります。
例
結果情報
グループ: パフォーマンス |
言語: C++ |
既定値: オフ |
コマンド ライン構文: EXPENSIVE_LOCAL_VARIABLE |
影響度: Medium |
バージョン履歴
R2021a で導入