Почему, когда я пишу вот такой код:
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
(посчитайте, насколько меньше знаков).
Что значит это предупреждение?
Ответ
В процессе самого умножения, вы перемножаете константы типа int, и только потом приводите результат к типу ull. Так что используйте соответствующие суффиксы (не знаю, какие они точно в студии), типа 1024llu
Или можно явно приводить тип сразу size_t(1024)*1024*2048
Комментариев нет:
Отправить комментарий