const のパラメーター値によって不要なデータ コピーが生じることがあります
const パラメーター値によって移動操作が禁止され、その結果より高いパフォーマンスを必要とするコピー操作が発生することがある
説明
この欠陥は、関数パラメーターとしての const オブジェクトによって、移動操作が禁止され、その結果より高いパフォーマンスを必要とするコピー操作が行われる可能性がある場合に発生します。
チェッカーは、特定の関数呼び出しで、移動操作が可能かどうかをチェックしません。チェッカーは、非トリビアル コピー操作と移動操作でクラス型を使用する const 関数パラメーターを強調表示するだけです。パラメーターを呼び出し先の関数に移動できるかどうかはユーザーが自分で決定できます。
リスク
関数の引数が rvalue の場合は、その引数に関連付けられたリソースが不要になり、呼び出し先関数内のパラメーターに "移動" できます。一般的に、移動操作の方がコピー操作よりコストがかからないため、コンパイラは、この状況では移動操作が使用されるようにします。const オブジェクトを関数パラメーターとして使用する場合は、このコンパイラの最適化が明示的に回避されます。
修正方法
パラメーターを呼び出し先関数に移動できることがわかっている場合は、const 修飾子をフラグ付きの関数パラメーターから削除します。
パフォーマンスの改善の程度は、使用しているコンパイラ、ライブラリ実装、環境によって異なる可能性があります。
例
結果情報
| グループ: パフォーマンス |
| 言語: C++ |
| 既定値: オフ |
コマンド ライン構文: CONST_PARAMETER_VALUE |
| 影響度: Low |
バージョン履歴
R2020a で導入