为什么 int 缩小为 float?
Why int is narrowed to float?
举个例子:
#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
?
那是因为float的精度,虽然比int有更大的范围,但只有7位。
因此,如果您尝试用超过 7 位精度表示 int 数字来浮点数,您 可能 可能会受到一些损失。 - 在这个意义上它被称为 narrowed。尽管 float 的范围比 int 宽,但它的精度 less。
此外,浮点表示是近似——也就是说,它不表示精确数(2的幂除外)。从这个意义上讲,int 也变窄了。
举个例子:
#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
?
那是因为float的精度,虽然比int有更大的范围,但只有7位。
因此,如果您尝试用超过 7 位精度表示 int 数字来浮点数,您 可能 可能会受到一些损失。 - 在这个意义上它被称为 narrowed。尽管 float 的范围比 int 宽,但它的精度 less。
此外,浮点表示是近似——也就是说,它不表示精确数(2的幂除外)。从这个意义上讲,int 也变窄了。