列表初始化( {...}
语法)不允许缩小转换。例如,尝试列表初始化 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};
不保留编译错误。