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) // ?
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) // ?
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.
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
@SergeyA dokładnie – bolov
@Sergey Jedynym powodem, dla którego używałbyś referencji rvalue, jest to, czy chcesz skutecznie od nich odejść. – bolov
Czy są przypadki, w których 'const &&' ma sens * w dowolnym miejscu *? – immibis
@immibis Znam [jeden] (http://en.cppreference.com/w/cpp/utility/functional/ref) – Praetorian
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. –