for (Something something : setOfSomething) // OK
for (Something const& something : setOfSomething) // OK
for (Something& something : setOfSomething) // ERROR
error: invalid initialization of reference of type 'Something&'
from expression of type 'const Something'
'için' aralık tabanlı yana yineleyici dönüş const Something
yaptığında? Something&
veya Something const&
döndürmelidir. Ve aralık tabanlı 'for' döngüsü that gibi yorumlandığından, neler olup bittiğine dair makul bir açıklama yapıyorum.bir STL kabın elemanına referans Kazanılması C++ 11 döngü
Düzenleme: Ben set
yerine yaklaşık unordered_set
bahsediyorum, bu karışıklık için özür.
Nesnemi değiştirirseniz ne tür bir değişmezler bozulabilir. Kapladığı bellek yeri ve büyüklüğü el değmeden kalır - ve bu iki şey kontrol edeceği tek şeydir. Ek olarak, kendi konteynerine sahip olsam ne olur? Derleyici neden bu tür bir kısıtlamayı konteynerlerime empoze eder? Dürüst olmak gerekirse, kirli bir hack gibi görünüyor. –
Nesnelerin bölümlerini "set" in karşılaştırmasıyla karşılaştırdığınızda, "set" içindeki nesnelerin sıralanması değiştirilebilir. Bu sorun, std :: set 'veya akrabalarından (çoklu, sırasız, vb.) Başka bir kapsayıcıda gerçekleşiyorsa, sorunuzu daha ayrıntılı olarak düzenleyebilir misiniz? –
Benim sorunum o zaman - Ben bir aptalım, ama onun derleyicinin işi değil. Dahası, onu eski tarz bir yineleyici döngüsünde değiştirebilirim. –