为什么int缩小到浮动?

时间:2016-06-09 15:39:20

标签: c++ language-lawyer type-narrowing

举个例子:

#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>

1 个答案:

答案 0 :(得分:3)

这是因为浮点数的精度,它只有7位数,尽管它的大于范围而不是int。

因此,如果您尝试使用超过7位精度的int数来表示浮动,那么可能可能会有一些损失。 - 在这个意义上它被称为缩小。虽然float的更宽范围比int更大,但它的更少精度。

此外,浮点表示是近似 - 也就是说,它不代表精确数字(2的幂除外)。从这个意义上说,int也缩小了。