首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将未签名的角色转换为签名和返回

将未签名的角色转换为签名和返回
EN

Stack Overflow用户
提问于 2016-12-09 10:26:46
回答 2查看 2.5K关注 0票数 6

我有一个没有符号的值,它需要将一个函数传递为一个有符号的值(它没有被函数所触及)。当它出来的时候我把它扔回未签名的地方。我知道,强制转换到签名的结果是在溢出时定义的实现,但我至少可以保证我返回时得到的值是相同的(比如函数指针)吗?

示例:

代码语言:javascript
复制
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;
}

我确实有一个监护人,即有符号整数总是大于或等于无符号整数的字节数,所以不应该因为空间不足而丢失任何数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-09 10:32:38

不,你没有这样的保证: conv.integral

2如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2^n,其中n是用来表示无符号类型的位数)。注意:在两个补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断)。-end注记 3如果目标类型有符号,则如果可以在目标类型中表示,则该值不变;否则,该值为implementation-defined.。

票数 6
EN

Stack Overflow用户

发布于 2016-12-09 10:31:09

不,您不能,因为要签名的强制转换的结果是在溢出时定义的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41058221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档