int y ;
y = 7000000000*1.0;
Это не дает ошибки в cpp
Хотя
int y ;
y = 7000000000;
Это приводит к целочисленному переполнению
Кто-нибудь может объяснить эти два сценария.
int y ;
y = 7000000000*1.0;
Это не дает ошибки в cpp
Хотя
int y ;
y = 7000000000;
Это приводит к целочисленному переполнению
Кто-нибудь может объяснить эти два сценария.
В вашей реализации C ++ и y = 7000000000*1.0
, и y = 7000000000
приводят к переполнению того, что может быть представлено в int
во время преобразования. Для преобразования из типа с плавающей запятой в целочисленный тип поведение в случае такого переполнения не определяется стандартом C ++. Для преобразования из одного целочисленного типа в другой он определяется реализацией.
Однако ваш компилятор диагностирует последнее во время компиляции и не может диагностировать первое. Это не означает, что первое в порядке (это не так), просто компилятор не сообщает о проблеме (и это не требуется стандартом C ++).
7000000000*1.0
-double
.7000000000
не подходит дляint
. - person DeiDei   schedule 28.02.2020int
, которые могут содержать 7000000000, но они необычны. - person user4581301   schedule 28.02.2020-pedantic -Wall -Wextra -Wconversion
выдает предупреждения для обоих. - person user4581301   schedule 28.02.2020runtime error: 7e+09 is outside the range of representable values of type 'int'
и устанавливает y равным 0. - person Eljay   schedule 28.02.2020