我有一个无符号值需要作为有符号值通过函数传递(函数不会对其进行更改)。当它出来时,我将其强制转换回无符号值。我知道在溢出时,将其强制转换为有符号值的结果是实现定义的,但我能否保证在将其强制转换回去时得到相同的值(就像函数指针一样)?
示例:
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;
}
我有保证,有符号整数的字节数始终大于或等于无符号整数,因此不会因为空间不足而丢失数据。