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