以下是在 C++ 中将 unsigned int 转换为 int 的有效且无问题的方法:
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
或者,还有更好的方法?
更新
正如 James McNellis 所指出的,将 unsigned int > INT_MAX 分配给整数并不是未定义的——而是由实现定义的。因此,这里的上下文现在特别是我的偏好是确保当 unsigned int 超过 INT_MAX 时此整数重置为零。
原始上下文
我有许多 unsigned int 用作计数器,但希望在特定情况下将它们作为整数传递。
在正常操作下,这些计数将保持在 INT_MAX 的范围内。但是,如果发生异常(但有效)情况,为了避免遇到未定义的实现特定行为,我希望在这里进行一些有效的转换。