2013-04-02 12 views

cevap

47

Sadece bir kez değerlendirilir.

range-init
{ 
    auto && __range = range-init; 
    for (auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin) { 
     for-range-declaration = *__begin; 
     statement 
    } 
} 

yaklaşık :

+1

sonra (parantez içine) ekspresyon veya gerdirilmesi-init-listesi: eşdeğer olarak standart bir dizi-bazlı for deyimi tanımlar. ':' Bir ifadenin sağında, 'range-init' ifadesi, parantez içinde bulunan ifadedir. :) –

+3

@LightnessRacesinOrbit: Gerçekten. Ve, kimsenin neden önemli olduğunu düşünürse, "bu, üst düzey bir virgül operatörünün" __range "bildirgesinde init-declarators arasında bir sınırlayıcı olarak yeniden yorumlanmamasını sağlar. –

+1

, "range-init" bir kez değerlendirilirken, "++ __ begin", her bir döngüde değerlendirilecek, böylece temel veri yapısı değiştiğinde, "range-init" iniz olduğu zaman temel veri yapısında olmayan değerler olabilir. Sonuç tanımlanmamış davranış da dahil olmak üzere "aralık için bildirme" ye atanır (örn. geçersizleştirilen iterörler). Sadece "bir kez değerlendirilen" ifadesinin, o anda güvenli bir şekilde üretilmekte olan tüm değerlere eşit olmadığını açıklığa kavuşturmak. –

İlgili konular