Целочисленное переполнение и умножение целых чисел в c ++ - PullRequest
3 голосов
/ 28 февраля 2020
    int y ;
    y = 7000000000*1.0;

Это не дает ошибки в cpp

Хотя

    int y ;
    y = 7000000000;

Это приводит к переполнению целых чисел

Может кто-нибудь объяснить, пожалуйста, эти два сценария ios.

1 Ответ

6 голосов
/ 28 февраля 2020

В вашей реализации C ++, y = 7000000000*1.0 и y = 7000000000 приводят к переполнению того, что представляется в int во время преобразования. Для преобразования из типа с плавающей точкой в ​​целочисленный тип поведение в случае такого переполнения не определяется стандартом C ++. Для преобразования из одного целочисленного типа в другой он определяется реализацией.

Однако ваш компилятор диагностирует последний во время компиляции и не может диагностировать первый. Это не означает, что с первым все в порядке (это не так), просто компилятор не сообщает о проблеме (и не требуется в соответствии со стандартом C ++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...