С++ 0x собирается сделать следующий код и аналогичный код плохо сформированным, потому что для него требуется так называемое сужение преобразования double
в int
.
int a[] = { 1.0 };
Мне интересно, используется ли эта инициализация в коде реального мира. Сколько кода будет нарушено этим изменением? Много ли усилий исправить это в коде, если ваш код вообще затронут?
Для справки см. 8.5.4/6 из n3225
Сужение преобразования является неявным преобразованием
- от типа с плавающей точкой до целочисленного типа или
- от long double до double или float или от double до float, за исключением случаев, когда источник является константным выражением, а фактическое значение после преобразования находится в диапазоне значений, которые могут быть представлены (даже если они не могут быть представлены точно), или
- от целочисленного типа или неперечисленного типа перечисления до типа флаговой точки, за исключением случаев, когда источник является константным выражением, а фактическое значение после преобразования будет вписываться в целевой тип и будет производить исходное значение при преобразовании обратно в исходное тип или
- из целочисленного типа или неперечисленного типа перечисления в целочисленный тип, который не может представлять все значения исходного типа, за исключением случаев, когда источник является константным выражением, а фактическое значение после преобразования будет вписываться в целевой тип и будет создавать оригинальное значение при преобразовании обратно в исходный тип.