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