範囲ベースの For ループで転送参照を使用する利点
範囲ベースの for ループでは、デフォルトの参照タイプは auto& です。読み取り専用操作に適しています。ただし、反復に要素の変更が含まれるシナリオでは、特定の特殊なケースを処理するために転送参照 (auto&&) を使用する必要がある場合があります。
そのようなシナリオの 1 つは、シーケンス反復子がプロキシ参照を返すときに発生します。プロキシ参照は、基礎となるコンテナが bool 型の要素を持つ非 const コンテナである場合に返されます。このような場合、auto& を使用してイテレータの右辺値参照を非 const 左辺値参照にバインドすると、コンパイル エラーが発生します。
この問題を解決し、イテレータの参照で非 const 操作を有効にするには、次のことが必要になります。自動&&を使用するにはauto&& を使用すると、コンパイラはイテレータの右辺値プロキシ参照を非 const 左辺値参照に正しくバインドできます。
次の例を考えてみましょう。
std::vector<bool> v(10); for (auto& e : v) // Error e = true;
このコードは、vector
のためコンパイルされません。イテレータから返された bool>::reference は、非 const 左辺値参照にバインドされません。代わりに auto&& を使用することで、この問題を解決できます。for (auto&& e : v) // Works e = true;
以上が範囲ベースの For ループで転送参照 (auto&&) を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。