C ++ 0x va rendre le code suivant et le code similaire mal formé, car il nécessite une conversion dite restrictive de a double
en a int
.
int a[] = { 1.0 };
Je me demande si ce type d'initialisation est beaucoup utilisé dans le code du monde réel. Combien de code sera brisé par ce changement? Y a-t-il beaucoup d'efforts pour résoudre ce problème dans votre code, si votre code est affecté du tout?
Pour référence, voir 8.5.4 / 6 de n3225
Une conversion restrictive est une conversion implicite
- d'un type à virgule flottante à un type entier, ou
- de long double à double ou float, ou de double à float, sauf lorsque la source est une expression constante et que la valeur réelle après conversion se situe dans la plage de valeurs pouvant être représentée (même si elle ne peut pas être représentée exactement), ou
- d'un type entier ou d'un type d'énumération non scopé à un type à virgule flottante, sauf lorsque la source est une expression constante et que la valeur réelle après conversion rentrera dans le type cible et produira la valeur d'origine lorsqu'elle sera reconvertie au type d'origine, ou
- d'un type entier ou d'un type d'énumération non scopé à un type entier qui ne peut pas représenter toutes les valeurs du type d'origine, sauf lorsque la source est une expression constante et la valeur réelle après la conversion rentrera dans le type cible et produira la valeur d'origine lorsque reconverti au type d'origine.