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

问题描述 投票:1回答:1
    int y ;
    y = 7000000000*1.0;

这不会在cpp中给出错误

尽管

    int y ;
    y = 7000000000;

这导致整数溢出

谁能解释这两种情况。

c++ floating-point integer multiplication integer-overflow
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.