C ++ 0x renderà il codice seguente e un codice simile mal formato, perché richiede una cosiddetta conversione di restringimento di a double
in a int
.
int a[] = { 1.0 };
Mi chiedo se questo tipo di inizializzazione sia utilizzato molto nel codice del mondo reale. Quanti codici verranno interrotti da questa modifica? È molto impegnativo risolvere questo problema nel codice, se il codice è interessato?
Per riferimento, vedere 8.5.4 / 6 di n3225
Una conversione restringente è una conversione implicita
- da un tipo a virgola mobile a un tipo intero, o
- da long double a double o float, o da double a float, tranne quando l'origine è un'espressione costante e il valore effettivo dopo la conversione è compreso nell'intervallo di valori che può essere rappresentato (anche se non può essere rappresentato esattamente), o
- da un tipo intero o un tipo di enumerazione senza ambito a un tipo a virgola mobile, tranne quando l'origine è un'espressione costante e il valore effettivo dopo la conversione si adatterà al tipo di destinazione e produrrà il valore originale quando convertito nel tipo originale, o
- da un tipo intero o un tipo di enumerazione senza ambito a un tipo intero che non può rappresentare tutti i valori del tipo originale, tranne dove l'origine è un'espressione costante e il valore effettivo dopo la conversione si adatterà al tipo di destinazione e produrrà il valore originale quando riconvertito al tipo originale.