C ++ 0x сделает следующий код и аналогичный код некорректным, поскольку он требует так называемого сужающего преобразования double
в int
.
int a[] = { 1.0 };
Мне интересно, часто ли такая инициализация используется в реальном коде. Сколько кода будет нарушено этим изменением? Приложено ли много усилий, чтобы исправить это в вашем коде, если он вообще затронут?
Для справки см. П. 8.5.4 / 6 в n3225.
Сужающее преобразование - это неявное преобразование
- от типа с плавающей запятой к целочисленному типу, или
- от long double до double или float, или от double до float, за исключением случаев, когда источник является постоянным выражением, а фактическое значение после преобразования находится в пределах диапазона значений, которые могут быть представлены (даже если оно не может быть представлено точно), или
- из целочисленного типа или типа перечисления без области действия в тип с плавающей точкой, за исключением случаев, когда источником является постоянное выражение, а фактическое значение после преобразования будет соответствовать целевому типу и даст исходное значение при преобразовании обратно в исходный тип, или
- из целочисленного типа или типа перечисления без области действия в целочисленный тип, который не может представлять все значения исходного типа, за исключением случаев, когда источник является постоянным выражением, а фактическое значение после преобразования будет соответствовать целевому типу и даст исходное значение, когда преобразован обратно в исходный тип.
int a[10] = {0};
- person John Dibling   schedule 14.12.20100
в любом случае ужеint
.) - person aschepler   schedule 14.12.2010{
инициализаторах фигурных скобок}
, и единственное устаревшее их использование - для массивов и структур POD. Кроме того, если в существующем коде есть явные приведения, где они должны быть, он не сломается. - person aschepler   schedule 14.12.2010unsigned char x = { -1 };
станет некорректным, как иunsigned char x = { ~0 };
на машине с дополнением до двух :) - person Johannes Schaub - litb   schedule 14.12.2010int a = 1.0;
илиint a; a = 1.0;
? - person j_random_hacker   schedule 14.12.2010int a = 1.0;
все еще действителен. - person Johannes Schaub - litb   schedule 14.12.2010