首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >算术类型的限定版本

算术类型的限定版本
EN

Stack Overflow用户
提问于 2019-03-27 16:25:03
回答 1查看 91关注 0票数 1

这似乎很明显,但我不明白我们是否可以将算术类型的合格版本视为算术类型。int -是一种算术类型。是volatile const int算法吗?6.2.5(p26)

类型的限定或非限定版本是属于同一类型类别的不同类型,并且具有相同的表示形式和对齐要求。

类型范畴6.2.5(p25)的定义

类型的特征是它的类型类别,它要么是派生类型的最外层派生(如上文在派生类型的构造中所指出的那样),要么是类型本身(如果该类型不包含派生类型)。

所以类型类别是关于类型是否是指针/数组/函数,并且与类型的“算术性”无关。

6.2.5(p18)中先前给出的算术类型的定义。因此,应用我引用的唯一规则和6.2.5(p18)中给出的定义,不可能声称const volatile int也是算术的。

与算术类型相同的表示和对齐要求不会使类型算术。

当我试图理解赋值运算符6.5.16.1(p1)的一致用法时,出现了这个问题。

左操作数具有原子的、限定的或不限定的算术类型,右边的操作数具有算术类型。

代码语言:javascript
运行
复制
const int a = 10;
//Do I really need this cast to make it arithmetic?
//Looks crazy
const int b = (int) a;  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-27 17:31:38

当我阅读“n1570 C11草案”或“n1256 C99草案”时,从其中提取第一个引文的完整段落是(强调我的):

§26迄今为止提到的任何类型都是不合格的类型。每个不合格类型都有其类型的几个限定版本,对应于一个、两个或全部三个const、several和限制限定符的组合。类型的限定或非限定版本是属于同一类型类别的不同类型,并且具有相同的表示形式和对齐要求。派生类型不受派生类型的限定符(如果有的话)限定。

我对整个段落的理解是,尽管类型不同,但非限定类型的限定版本共享所有其他属性。因此,const int是算术类型,也是整数类型。

此外,6.7.3语义学第3节说:

与限定类型关联的属性仅对属于lvalue的表达式有意义。

这意味着对两个限定const int的操作会产生一个不合格的int结果,因为它是一个rvalue。

这些限定符只修改与lvalue访问相关的属性的非限定类型。它们是不同的类型,因为它们具有不同的访问属性,这些限定属性的详细信息在6.7.3 Type限定符中给出。它们必须是不同的类型,因为指向限定类型(派生类型)的指针必须是不同的类型。但这与算术类型的限定版本无关,而不是算术类型。

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

https://stackoverflow.com/questions/55382078

复制
相关文章

相似问题

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