C++0x将会禁止下面这段代码以及类似的代码,因为它需要将一个双精度浮点数double
缩小转换(也称为narrowing conversion)成一个整型int
。
int a[] = { 1.0 };
我想知道这种初始化在实际代码中是否经常使用。如果进行更改,会有多少代码会出现问题?如果受到影响,修复这个问题需要多大的努力?
请参阅n3225中的8.5.4/6节。
缩小转换是一种隐式转换
- 从浮点类型到整数类型,或
- 从 long double 到 double 或 float,或者从 double 到 float,但源是常量表达式且转换后的实际值在可以表示的值范围内(即使不能完全表示),或
- 从整数类型或未作用域枚举类型到浮点类型,但源是常量表达式且转换后的实际值将适合于目标类型并且在转换回原始类型时将产生原始值,或
- 从整数类型或未作用域枚举类型转换为无法表示所有原始类型值的整数类型,但源是常量表达式且转换后的实际值将适合于目标类型并且在转换回原始类型时将产生原始值。
0
已经是一个int
了。) - aschepler{
花括号初始化器}
内部是不规范的,而这些的唯一遗留用法是用于数组和POD结构。此外,如果现有代码在适当的位置具有显式转换,则不会出现错误。 - ascheplerint a = 1.0;
仍然有效。 - Johannes Schaub - litb