首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么下面的表达式描述了缩小转换的特性?

为什么下面的表达式描述了缩小转换的特性?
EN

Stack Overflow用户
提问于 2014-01-20 19:04:34
回答 2查看 287关注 0票数 8

这个表达式可以在标准(N3797)的§8.5.4/7中的示例中找到。

代码语言:javascript
运行
复制
unsigned int ui1 = {-1}; // error: narrows

鉴于第8.5.4/7节及其第四个要点:

缩窄转换是隐式转换:

  • 从整数类型或非作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是一个常量表达式,其在积分提升后的值将适合目标类型。

我想说这里没有缩小,因为-1是一个常量表达式,积分提升后的值符合一个无符号整数。

另见关于积分促进的第4.5/1节。

整数转换秩(4.13)小于int的整数类型( bool、char16_t、char32_t或wchar_t )以外的整数类型的prvalue可以转换为int类型的prvalue,如果int可以表示源类型的所有值;否则,源prvalue可以转换为类型为无符号int的prvalue。

从4.13我们得到-1 (一个int)的秩等于一个无符号int的秩,因此它可以转换为一个无符号int。

编辑

不幸的是,曾傑瑞咖啡从这个线程中删除了他的答案。我相信他是在正确的轨道上,如果我们接受的事实,目前的第4点在第8.5.4/7节是错误的,在这个变化在标准。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 14:03:42

对标准措辞的更改旨在确认这样一种理解,即将负值转换为无符号类型是而且一直是缩小转换。

非正式地说,-1不能在任何无符号类型的范围内表示,而表示它的位模式如果存储在无符号int中,则不代表相同的值。因此,这是一个缩小转换和推广/扩大不涉及。

这是关于阅读标准的高雅艺术。像往常一样,编译器知道得最好。

票数 1
EN

Stack Overflow用户

发布于 2014-01-20 19:07:28

intunsigned int并没有一个整体的推广,因此还不完善。

这将是一个完整的转换

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

https://stackoverflow.com/questions/21242070

复制
相关文章

相似问题

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