我需要将一个“无符号长”类型参数传递给一个只接受 int 的函数。
我没有找到在 MSDN 上投射它的安全方法。有人可以分享一个安全的功能来做到这一点吗?
问问题
6139 次
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)argument
或static_cast<int>(argument)
简单地传递一个参数,该语言将自动执行转换。
于 2013-08-08T18:46:47.853 回答