【发布时间】:2018-06-16 21:27:42
【问题描述】:
列表初始化({...} 语法)不允许缩小转换范围。例如,尝试使用3.14f 对int i 进行列表初始化会出现编译错误,因为从浮点值到整数的转换正在缩小:
<source>:11:32: error: narrowing conversion of '3.1400001e+0f' from 'float' to 'int' inside { } [-Wnarrowing]
int i{3.14f};
^
话虽如此,为什么可以用3.14构造一个float f,它的类型是double? (从double 到float 的转换被视为缩小范围。)执行以下操作:
float f{3.14};
没有编译错误。
【问题讨论】:
-
您确定允许从 double 到 float 的转换吗?
extern double y; struct X { float f; } x{y};我出错了。
标签: c++ c++11 list-initialization