2016-05-04 31 views
14

Czy istnieją przypadki, w których sensowne jest używanie const&& w pętlach zasięgu?Zastosowania const && in range-for?

for (const auto && x : c) // ? 
+3

Czy są przypadki, w których 'const &&' ma sens * w dowolnym miejscu *? – immibis

+2

@immibis Znam [jeden] (http://en.cppreference.com/w/cpp/utility/functional/ref) – Praetorian

+0

Byłem zainteresowany konkretnym kontekstem range-for. Widziałem 'const auto &&' użyte w zakresie-dla w [tym kodzie] (https://blogs.msdn.microsoft.com/larryosterman/2015/11/16/recursively-deleting-a-direct kursith-long-filename -support /) i był ciekaw tego. Zamiast 'for (const auto && it: dl)' Po prostu użyłem 'for (const auto & ...)' dla _observing_ items. –

Odpowiedz

9

Krótka odpowiedź: nr, nie ma zastosowania do const auto&& w range-for loops (lub inaczej)

użyłbyś rvalue references jeśli chcesz przenosić obiekty w sposób optymalny. Nie możesz tego zrobić (ogólnie), chyba że możesz zmodyfikować obiekt przeniesiony z. Tak więc const rvalues (*) nie mają praktycznego zastosowania (nie można się z nich przenieść, ponieważ nie można ich modyfikować).

range-for loops nic nie wnosić do tabeli w tej dyskusji o const auto&&.


Sprawdź na przykład ten SO wątku: Do rvalue references to const have any use?

Znaleziony tylko wykorzystanie const odniesienia rvalue jest usunięcie niektórych przeciążeń funkcyjnych. Nie dotyczy to range-for loops.


(*) przy okazji, const auto&& jest const odniesienia RValue, a nie odniesienie spedycja.

+0

Cóż, masz gwarancję, że elementy nie będą modyfikowane - ale jeśli jest to pożądane, proste odniesienie do const będzie bardziej surowe. – SergeyA

+0

@SergeyA dokładnie – bolov

+2

@Sergey Jedynym powodem, dla którego używałbyś referencji rvalue, jest to, czy chcesz skutecznie od nich odejść. – bolov