Это следующий эффективный и беспроблемный способ преобразования беззнакового int в int в C ++:
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
Или есть способ получше?
UPDATE
Как указал Джеймс МакНеллис, не является неопределенным присваивать целое число без знака int> INT_MAX - скорее это определяется реализацией. Таким образом, контекст здесь теперь специально для меня, чтобы убедиться, что это целое число сбрасывается в ноль, когда беззнаковое целое превышает INT_MAX.
Исходный контекст
У меня есть несколько целых чисел без знака, используемых в качестве счетчиков, но я хочу передать их как целые числа в конкретном случае.
При нормальной работе эти значения остаются в пределах INT_MAX. Однако, чтобы избежать столкновения с undefined специфичным для реализации поведением в случае возникновения ненормального (но допустимого) случая, я хочу сделать здесь эффективное преобразование.