0

intのみを取る関数に「unsigned long」型の引数を渡す必要があります。
MSDN でキャストする安全な方法が見つかりませんでした。誰かがこれを行うための安全な機能を共有してもらえますか?

4

2 に答える 2

4

はで表現できない値を保持できるため、unsigned long値をに変換する「安全な」方法はありません。intunsigned longint

次のようなことができます。

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 に答える