2016-05-04 12 views
14

Esistono casi in cui ha senso utilizzare const&& nell'intervallo per cicli?Applicazioni di const && in range-for?

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

Esistono casi in cui 'const &&' ha senso * ovunque *? – immibis

+2

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

+0

Mi interessava il particolare contesto di range-for. Ho visto 'const auto &&' usato in un intervallo-per in [questo codice] (https://blogs.msdn.microsoft.com/larryosterman/2015/11/16/recursively-deleting-a-directorywith-long-filename -supporto /) e ne era curioso. Invece di 'for (const auto && it: dl)' Avrei appena usato 'for (const auto & ...)', per _observing_ items. –

risposta

9

Risposta breve: no , non ci sono usi per const auto&& a range-for loops (o in altro modo)

usereste rvalue references se si desidera spostare gli oggetti in modo ottimizzato. Non è possibile farlo (in generale) a meno che non sia possibile modificare l'oggetto spostato da. Quindi const rvalues (*) non sono di utilità pratica (non puoi spostarti da loro perché non puoi modificarli).

range-for loops non portare nulla al tavolo in questa discussione su const auto&&.


Controllare per esempio questo SO messaggio: Do rvalue references to const have any use?

L'trovato impiego di riferimento rvalue const è solo eliminare alcuni sovraccarichi di funzioni. Questo non si applica a range-for loops.


(*) a proposito, const auto&& è un riferimento rvalue const, non un riferimento di inoltro.

+0

Bene, si è certi di evitare che gli elementi vengano modificati, ma se lo si desidera, il semplice riferimento const sarà più stretto in avanti. – SergeyA

+0

@SergeyA esattamente – bolov

+2

@SergeyA l'unico motivo per cui si utilizzano i riferimenti di valore è se si desidera passare effettivamente da essi. – bolov