C + + 0x 将使下面的代码和类似的代码变得格式不正确,因为它需要所谓的 缩小转换范围(double
到 int
)。
int a[] = { 1.0 };
我想知道这种初始化在现实世界的代码中是否经常使用。此更改将破坏多少代码?如果您的代码受到任何影响,那么在您的代码中修复这个问题是否需要很大的努力?
参见 n3225的8.5.4/6
收缩转换是隐式转换
- 从浮点类型转换为整数类型,或者
- 从 long double 到 double 或 float,或者从 double 到 float,除非源是一个常量表达式,并且转换后的实际值在可表示的值范围内(即使它不能精确表示) ,或者
- 从整数类型或未作用域的枚举类型转换为浮点类型,但源是常量表达式且转换后的实际值将适合目标类型并在转换回原始类型时生成原始值的情况除外,或者
- 从整数类型或无作用域的枚举类型到不能表示原始类型的所有值的整数类型,除非源是一个常数表达式,并且转换后的实际值将适合目标类型,并且在转换回原始类型时将产生原始值。