#cpp #visual_studio #integer_overflow
Почему, когда я пишу вот такой код: size_t VRamSize = 2048 * 1024 * 1024; то получаю предупреждение "Переполнение константы"? warning C4307: '*' : integral constant overflow size_t у меня unsigned long long (самый большой тип), у него диапазон, внимание, 0 to 18,446,744,073,709,551,615 2048 * 1024 * 1024 = 2147483648 (посчитайте, насколько меньше знаков). Что значит это предупреждение?
Ответы
Ответ 1
В процессе самого умножения, вы перемножаете константы типа int, и только потом приводите результат к типу ull. Так что используйте соответствующие суффиксы (не знаю, какие они точно в студии), типа 1024llu. Или можно явно приводить тип сразу size_t(1024)*1024*2048.
Комментариев нет:
Отправить комментарий