2016-01-14 3 views
0

Я обновляю свое приложение до 64-битной платформы в VS2010. Я хочу решить следующее предупреждение, что это правильный способ сделать это? Я не хочу изменять тип данных MyVar, потому что эта переменная используется в качестве аргумента во многих функциях. Если я хочу набирать вывод вывода «strlen (Mystring)» на const int, то как это сделать.Предупреждение C4267: 'initializing': преобразование из 'size_t' в 'UINT'

const int aSel = 40; 
UINT MyVar= aSel - strlen(Mystring);//Warning C4267 
+0

Большинство компиляторов сохраняют 'int' как 32-битное значение даже в 64-битных системах. Скорее всего, фактический тип 'size_t' является псевдонимом типа 64 бит в 64-битной системе и 32 бита в 32-битной системе. –

ответ

3

У вас есть множество вариантов:

  1. Игнорировать предупреждения в глобальном масштабе - я очень не рекомендую этот. В какой-то момент вы столкнетесь с 4 ГБ + 1 «вещь», присвойте UINT и усечете.

  2. Игнорировать предупреждение в этой конкретной строке с комментарием относительно того, почему это безопасно. Это немного запах кода для меня, и довольно шумный, а не портативный.

  3. Изменить тип MyVar. Вы говорите, что не хотите этого делать. В этом конкретном случае это разумно, но с задним числом MyVar почти наверняка было объявлено как size_t.

  4. Статический литье: auto MyVar = static_cast<UINT>(aSel - strelen(MyString));.

Я думаю, что я предпочитаю изменить тип MyVar, но если это действительно слишком много работы, то static_cast, вероятно, лучше всего. (Не используйте c-style cast - вы хотите быть явным, что вы делаете static_cast, а не reinterpret_cast.)

0

size_t является 64бит в большинстве реализаций 64bit компилятора. поэтому вам лучше использовать тип size_t вместо UINT. Таким образом, это будет безопасно как на 32-битной, так и на 64-битной системах.

+0

Если вы собираетесь изменить тип вообще, зачем использовать 'UINT64', а не только' size_t'? Нет смысла форсировать 32-битные компиляции для использования 64-битных типов, если нет размеров, требующих 64-разрядных типов. Во всяком случае, OP не хочет менять тип. Если вы не согласны с выбором OP, то, по крайней мере, вы должны объяснить, почему. – hvd

+0

@hvd, вы правы, я обновил свой ответ. –

Смежные вопросы