計算量の多いローカル変数のコピー
説明
この欠陥は、ローカル変数が 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 で導入