#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.
Комментариев нет:
Отправить комментарий