以下は、C++ で unsigned int を int に変換する効率的で問題のない方法ですか?
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
それとももっと良い方法がありますか?
アップデート
James McNellis が指摘したように、unsigned int > INT_MAX を整数に割り当てることは未定義ではありません。むしろ、これは実装定義です。そのため、ここでのコンテキストは、unsigned int が INT_MAX を超えたときにこの整数がゼロにリセットされるようにすることを特に好みます。
元のコンテキスト
カウンターとして使用される unsigned int がいくつかありますが、特定のケースではそれらを整数として渡したいと考えています。
通常の操作では、これらのカウントは INT_MAX の範囲内にとどまります。ただし、異常な (しかし有効な) ケースが発生した場合に未定義の実装固有の動作に陥らないようにするために、ここで効率的な変換が必要です。