举个例子:
#include <iostream>
void foo(float) {}
int main()
{
int i{43};
foo(float{i});
return 0;
}
编译器(clang,msvc)不编译它(GCC编译,但有警告):non-constant-expression cannot be narrowed from 'int' to 'float' in initializer list
。
当int
更宽而不是float
时,为什么编制者会说float
缩小到int
?< / p>
答案 0 :(得分:3)
这是因为浮点数的精度,它只有7位数,尽管它的大于范围而不是int。
因此,如果您尝试使用超过7位精度的int数来表示浮动,那么可能可能会有一些损失。 - 在这个意义上它被称为缩小。虽然float的更宽范围比int更大,但它的更少精度。
此外,浮点表示是近似 - 也就是说,它不代表精确数字(2的幂除外)。从这个意义上说,int也缩小了。