为什么 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 缩小 floatfloat 更宽 int?

那是因为float的精度,虽然比int有更大的范围,但只有7位。

因此,如果您尝试用超过 7 位精度表示 int 数字来浮点数,您 可能 可能会受到一些损失。 - 在这个意义上它被称为 narrowed。尽管 float 的范围比 int ,但它的精度 less

此外,浮点表示是近似——也就是说,它不表示精确数(2的幂除外)。从这个意义上讲,int 也变窄了。