【发布时间】:2016-12-09 10:26:46
【问题描述】:
我有一个无符号值需要作为有符号值通过函数(函数没有触及它)。当它出来时,我把它扔回未签名的。我知道强制转换为已签名的结果是在溢出时定义的实现,但我至少可以保证当我将它强制转换回来时(如函数指针)最终得到相同的值吗?
例子:
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;
}
我确实保证有符号整数总是大于或等于无符号整数(以字节为单位),因此不会因空间不足而丢失任何数据。
【问题讨论】:
标签: c++ language-lawyer