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