C++11 では、オブジェクトの不必要なコピーを回避しstd::move
、そうでなければコピーが発生する場合にそれらのセマンティクスを適用するためのセマンティクスが導入されています。ただし、デフォルトではなく、コピーが必要な場合もあります。
reverse
たとえば、この単純な の実装を考えてみましょう。範囲ベースfor
では完全転送が使用されるため、ループ内でコンテナーを変更すると破損します。
auto out_iter = container.rbegin();
for ( auto value : container ) {
* out_iter ++ = value;
}
目標は、これを使用して修正することです
for ( auto value : copy( container ) ) {
それは十分に単純に思えます…任意の引数を受け入れ、基になる型を取得し、一時的なコピーを返します。