C++ 11では、不必要にオブジェクトをコピーすることを避けるためのセマンティクスが導入されており、そうでない場合はコピーが発生するときにそれらのセマンティクスを適用します。しかし、コピーが必要な場合もあれば、デフォルトではない場合もあります。欠落している単項std :: copyのベスト・インプリメンテーション
たとえば、reverse
のこの単純な実装を考えてみましょう。範囲ベースのfor
は完璧な転送を使用するため、ループ内のコンテナを変更すると破損します。
auto out_iter = container.rbegin();
for (auto value : container) {
* out_iter ++ = value;
}
目標は...それは十分に簡単なようで、この使用
for (auto value : copy(container)) {
を修正する任意の引数を受け入れ、基になる型を取得し、一時的なコピーを返すことです。
EDSLラムダライブラリは通常、この関数' val'に名前を付けます)。 –