Инициализация списка (синтаксис {...}
) не позволяет сужать преобразования. Например, попытка инициализации списка int i
с 3.14f
содержит ошибку компиляции, поскольку преобразование значений с плавающей запятой в целые числа сужается:
<source>:11:32: error: narrowing conversion of '3.1400001e+0f' from 'float' to 'int' inside { } [-Wnarrowing]
int i{3.14f};
^
С учетом сказанного, почему возможно построить float f
с 3.14
, который имеет тип double
? (Преобразование из double
в float
считается сужающим.) Делаем следующее:
float f{3.14};
Не содержит ошибок компиляции.
extern double y; struct X { float f; } x{y};
ошибки для меня. - person   schedule 07.01.2018