C ++ 0x bir sözde gerektirdiğinden, aşağıdaki kod ve benzeri kod kötü şekillendirilmiş yapacak daralan dönüşüm a double
a int
.
int a[] = { 1.0 };
Bu tür bir başlatmanın gerçek dünya kodunda çok kullanılıp kullanılmadığını merak ediyorum. Bu değişiklikle kaç kod kırılacak? Kodunuz etkilendiyse, bunu kodunuzda düzeltmek çok zahmetli mi?
Referans için n3225'in 8.5.4 / 6'sına bakın
Daralan bir dönüşüm örtük bir dönüşümdür
- kayan nokta türünden tam sayı türüne veya
- long double'dan double'a veya float'a veya double'dan float'a, ancak kaynağın sabit bir ifade olduğu ve dönüşümden sonraki gerçek değerin temsil edilebilecek değerler aralığı içinde olduğu durumlar (tam olarak temsil edilemese bile) veya
- tamsayı türünden veya kapsamı belirlenmemiş numaralandırma türünden, kaynağın sabit bir ifade olduğu ve dönüşümden sonraki gerçek değerin hedef türüne sığacağı ve orijinal türüne geri dönüştürüldüğünde orijinal değeri üreteceği durumlar hariç, değişken nokta türüne
- bir tamsayı türünden veya kapsamı kaldırılmış numaralandırma türünden, kaynağın sabit bir ifade olduğu ve dönüştürmeden sonraki gerçek değerin hedef türüne sığacağı ve orijinal değeri ne zaman üreteceği dışında, orijinal türün tüm değerlerini temsil edemeyen bir tam sayı türüne orijinal türe dönüştürülür.