0

我需要将一个“无符号长”类型参数传递给一个只接受 int 的函数。
我没有找到在 MSDN 上投射它的安全方法。有人可以分享一个安全的功能来做到这一点吗?

4

2 回答 2

4

没有“安全”的方式将unsigned long值转换为int,因为 anunsigned long可以保存无法在 中表示的值int

你可以这样做:

unsigned long arg = some_value;
if (arg <= INT_MAX) {
    func(arg); // the value will be implicitly converted
}
else {
    // do something else
}

请注意,在这种情况下不需要检查INT_MIN. 如果参数是long而不是unsigned long,您需要检查下限和上限:

if (arg >= INT_MIN && arg <= INT_MAX) ...

当然,如果值不合适,您必须决定该怎么做。

于 2013-08-08T18:46:11.163 回答
1

没有安全的方法,因为unsigned long包含无法在 中表示的值int

但是,如果您确定转换是安全的,您可以按原样编写(int)argumentstatic_cast<int>(argument)简单地传递一个参数,该语言将自动执行转换。

于 2013-08-08T18:46:47.853 回答