const rvalue 参照パラメーターにより、不要なデータ コピーが発生する可能性があります
説明
この欠陥は、関数が const
rvalue 参照をパラメーターとして取る場合に発生します。たとえば、この移動コンストラクターは const
rvalue 参照を取ります。
class aClass { public: aClass (const aClass&& anotherClass); }
リスク
rvalue 参照パラメーターの const
の特性により、期待される移動操作が妨げられます。
たとえば、この問題は const
パラメーターを持つコピー コンストラクターからのコピー アンド ペーストで移動コンストラクターを記述した場合に発生する可能性があります。次に例を示します。
aClass (const aClass& anotherClass);
&
は &&
に変更したものの、参照内またはコンストラクター本体のコピー操作で const
を省略するのを忘れたとします。この場合、const
rvalue 参照を持つ移動コンストラクターはエラーなしでコンパイルされますが、実際にデータをコピーする移動コンストラクターが非効率的になります。修正方法
rvalue 参照パラメーターから const
修飾子を削除します。
たとえば、前のセクションでの移動コンストラクターは次のように書き換えることができます。
class aClass { public: aClass (aClass&& anotherClass); }
パフォーマンスの改善の程度は、使用しているコンパイラ、ライブラリ実装、環境によって異なる可能性があります。
例
結果情報
グループ: パフォーマンス |
言語: C++ |
既定値: オフ |
コマンド ライン構文: CONST_RVALUE_REFERENCE_PARAMETER |
影響度: Low |
バージョン履歴
R2021a で導入