C ++中的整数溢出和整数乘法

Ane*_*ket 3 c++ floating-point integer integer-overflow multiplication

    int y ;
    y = 7000000000*1.0;
Run Code Online (Sandbox Code Playgroud)

这不会在 cpp 中给出错误

尽管

    int y ;
    y = 7000000000;
Run Code Online (Sandbox Code Playgroud)

这会导致整数溢出

谁能解释一下这两种情况。

Eri*_*hil 6

在您的 C++ 实现中,y = 7000000000*1.0y = 7000000000结果都溢出了int在转换期间可表示的内容。对于从浮点类型到整数类型的转换,C++ 标准没有定义发生这种溢出时的行为。对于从一种整数类型到另一种类型的转换,它是实现定义的。

但是,您的编译器在编译期间诊断后者而无法诊断前者。这并不意味着前者没问题(不是),只是编译器不报告问题(并且 C++ 标准不要求)。