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