const
直接最適化が行われる最も明白なポイントは、関数に引数を渡すことです。多くの場合、関数がデータを変更しないようにすることが重要であるため、関数シグネチャの唯一の実際の選択肢は次のとおりです。
void f(Type dont_modify); // or
void f(Type const& dont_modify);
もちろん、ここでの本当の魔法は、オブジェクトの (高価な) コピーを作成するのではなく、参照を渡すことです。しかし、参照が としてマークされていない場合const
、これはこの関数のセマンティクスを弱め、マイナスの影響 (エラー追跡が難しくなるなど) をもたらします。したがって、const
ここで最適化を有効にします。
/EDIT:実際には、優れたコンパイラは関数の制御フローを分析し、引数を変更しないことを判断し、最適化(コピーではなく参照を渡す)自体を行うことができます。const
ここにあるのはコンパイラのヘルプです。ただし、C++ にはかなり複雑なセマンティクスがあり、そのような制御フロー分析は大きな関数に対して非常にコストがかかる可能性があるため、これをコンパイラに頼るべきではないでしょう。誰かが私をバックアップする/私が間違っていることを証明するデータを持っていますか?
/EDIT2: はい、カスタム コピー コンストラクターが機能するようになると、さらに複雑になります。残念ながら、コンパイラーはこの状況でそれらの呼び出しを省略することが許可されていないためです。