2016-05-04 22 views
14

Aralıklı döngüler için const&& kullanımının mantıklı olduğu durumlar var mı?const && için menzil uygulamaları?

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

* yerde * 'const &&' mantıklı herhangi vakalar var mı? – immibis

+2

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

+0

Ben menzil için belirli bir bağlam ile ilgilendi. Bir dizi-için kullanılan 'const oto && 'testerede olduğu [bu kod] (https://blogs.msdn.microsoft.com/larryosterman/2015/11/16/recursively-deleting-a-directorywith-long-filename -support /) ve bunu merak ediyordum. '(Const auto && it: dl) için' 'yerine '' _observing_ öğeleri için '' (const auto & ...)' için kullanmıştım. –

cevap

9

Kısa cevap: hayır optimize edilmiş bir şekilde nesneleri hareket etmek istiyorsanız rvalue references kullanırsınız

range-for loops (veya başka türlü) içinde const auto&& için herhangi kullanımları vardır. Taşınan nesneyi değiştiremezseniz, bunu (genel olarak) yapamazsınız. Yani const rvalues (*) hiçbir pratik kullanımda değildir (onlardan hareket edemezsiniz çünkü onları değiştiremezsiniz).

range-for loops Bu tartışma yaklaşık const auto&& tabloya şey getirmezler. Bu SO sonrası örneği için


Kontrol:

Do rvalue references to const have any use? sadece const rvalue referans kullanımını bulduğumuz bazı fonksiyon aşırı yükleri silmektir. Bu, range-for loops için geçerli değildir. Bu arada


(*), const auto&& const rvalue referansı, bir yönlendirme referanstır.

+0

Peki, öğelerin değiştirilmesini engelleyebilirsiniz - ancak bu istenirse, basit yapı referansı daha güçlüdür. – SergeyA

+0

@SergeyA tam olarak – bolov

+2

@SergeyA rvalue referanslarını kullanmanızın tek nedeni, onlardan etkili bir şekilde geçmek istemenizdir. – bolov

İlgili konular