C ++ 0x hará que el siguiente código y un código similar estén mal formados, porque requiere una llamada conversión de restricción de a double
a a int
.
int a[] = { 1.0 };
Me pregunto si este tipo de inicialización se usa mucho en el código del mundo real. ¿Cuántos códigos se romperán con este cambio? ¿Es mucho esfuerzo arreglar esto en su código, si su código se ve afectado?
Para referencia, consulte 8.5.4 / 6 de n3225
Una conversión de restricción es una conversión implícita
- de un tipo de punto flotante a un tipo entero, o
- de doble largo a doble o flotante, o de doble a flotante, excepto cuando la fuente es una expresión constante y el valor real después de la conversión está dentro del rango de valores que se pueden representar (incluso si no se puede representar exactamente), o
- de un tipo de número entero o de enumeración sin ámbito a un tipo de punto flotante, excepto cuando la fuente es una expresión constante y el valor real después de la conversión se ajustará al tipo de destino y producirá el valor original cuando se vuelva a convertir al tipo original, o
- de un tipo de número entero o tipo de enumeración sin ámbito a un tipo de número entero que no puede representar todos los valores del tipo original, excepto cuando la fuente es una expresión constante y el valor real después de la conversión se ajustará al tipo de destino y producirá el valor original cuando convertido de nuevo al tipo original.