将
我需要将一个"unsigned long"类型的参数传递给一个只接受int的函数。
我没有找到一个安全的方法把它放到MSDN上。有人能分享一个安全功能吗?
unsigned long
值转换为int
没有"安全"的方法,因为unsigned 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) ...
当然,如果价值不合适,你必须决定该怎么办。
由于unsigned long
包含无法在int
中表示的值,因此没有安全的方法。
但是,如果您确信转换是安全的,您可以编写(int)argument
或static_cast<int>(argument)
,或者简单地按原样传递一个参数,该语言将自动执行转换。