C ++ 0x spowoduje, że następujący i podobny kod będzie źle sformułowany, ponieważ wymaga tak zwanej konwersji zawężającej a double
do a int
.
int a[] = { 1.0 };
Zastanawiam się, czy ten rodzaj inicjalizacji jest często używany w kodzie świata rzeczywistego. Ile kodów zostanie uszkodzonych przez tę zmianę? Czy naprawienie tego w kodzie wymaga wiele wysiłku, jeśli w ogóle ma to wpływ na kod?
Dla odniesienia, patrz 8.5.4 / 6 n3225
Konwersja zawężająca jest konwersją niejawną
- z typu zmiennoprzecinkowego na typ całkowity lub
- od long double do double lub float, lub od double do float, z wyjątkiem sytuacji, gdy źródłem jest wyrażenie stałe, a rzeczywista wartość po konwersji mieści się w zakresie wartości, które można przedstawić (nawet jeśli nie można jej dokładnie przedstawić) lub
- z typu całkowitego lub typu wyliczenia bez zakresu do typu zmiennoprzecinkowego, z wyjątkiem sytuacji, gdy źródło jest wyrażeniem stałym, a rzeczywista wartość po konwersji będzie pasować do typu docelowego i utworzy oryginalną wartość po przekonwertowaniu z powrotem na typ oryginalny lub
- z typu całkowitego lub typu wyliczenia bez zakresu do typu całkowitego, który nie może reprezentować wszystkich wartości typu oryginalnego, z wyjątkiem sytuacji, gdy źródło jest wyrażeniem stałym, a rzeczywista wartość po konwersji będzie pasować do typu docelowego i wytworzy oryginalną wartość, gdy przekonwertowany z powrotem na oryginalny typ.