在VC++中将无符号long强制转换为int



我需要将一个"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)argumentstatic_cast<int>(argument),或者简单地按原样传递一个参数,该语言将自动执行转换。

最新更新