我需要将一个'unsigned long'类型参数传递给只接受int的函数。
我没有找到一种安全的方法将其投射到MSDN上。有人可以分享安全功能吗?
答案 0 :(得分:3)
没有"安全"将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) ...
当然,如果价值不合适,您必须决定该怎么做。
答案 1 :(得分:1)
没有安全的方法,因为unsigned long
包含无法在int
中表示的值。
但如果您确定转换是安全的,则可以编写(int)argument
或static_cast<int>(argument)
或只是按原样传递参数,语言将自动执行转换。