符号付きの値として関数を渡す必要がある符号なしの値を持っています(関数には触れません)。それが出てきたら私はそれを無署名のものに戻します。私は、キャストの結果がオーバーフロー時に定義された実装であることを知っていますが、(関数ポインタのように)キャストしたときに同じ値になることは少なくとも保証できますか?キャストと符号なしから符号付きへのキャスト
例:
int32_t function_with_default(int32_t a_Default)
{
// Try some stuff
// ...
// Fall back to default
return a_Default;
}
void main()
{
uint32_t input = UINT32_MAX;
uint32_t output = static_cast<uint32_t>(function_with_default(static_cast<int32_t>(input));
// Is is guarenteed to be true?
input == output;
}
私は符号付き整数は常にバイトの符号なし整数より大きいか等しいので、データはスペース不足のために失われないことをguarenteeを持っています。
逆に、あなたの値があなたがキャストしている範囲を超えていない限り、あなたはこの保証をします。 – UKMonkey