C++11标准中规定基本数据类型大小相对顺序的章节在哪?是否继承自C?
好问题!关于C++里整数类型的大小关系,其实标准里有明确的依据,而且和C标准的关联也很清晰,咱们来拆解清楚:
1. C++标准自身的直接规定
在C++11的官方代理文档n3337里,§3.9.1 Fundamental types的第2段明确写道:
There are five standard signed integer types: “signed char”, “short int”, “int”, “long int”, and “long long int”. In this list, each type provides at least as much storage as those preceding it in the list.
无符号整数类型也遵循同样的规则:每个无符号类型的存储容量不少于列表中排在它前面的类型。
这里的“存储容量”直接对应sizeof的结果——因为sizeof返回的是类型占用的字节数,而每个字节至少包含8位(这也是标准规定的),所以存储容量的大小关系直接转化为sizeof的不等式:
sizeof(short int) <= sizeof(int)sizeof(int) <= sizeof(long int)sizeof(long int) <= sizeof(long long int)
这些就是你提到的大小关系的直接来源,可能你之前看文档时没注意到这个章节的描述,它没有直接写sizeof的不等式,但逻辑上完全等价。
2. 与C标准的继承关系
C标准确实会继承C标准的相关内容,比如在n3337的**§1.2 Normative references**里,明确引用了C99标准(文档编号n1256)。而C99的§5.2.4.2.1里规定的各整数类型的最小、最大值,也间接支撑了C里的大小关系——因为C++的整数类型不能比C标准规定的更小,这也从侧面保证了类型之间的存储容量顺序。
不过要注意,C++自身的条款已经足够明确这些大小关系,继承C标准更多是补充和一致性的保障。
总结
- C++标准自身通过规定整数类型的存储容量顺序,直接确立了
sizeof的大小不等式; - 这些规则对有符号和无符号整数类型都适用;
- 虽然C继承了C标准的相关内容,但核心的大小关系在C自己的标准里就有明确表述。
内容的提问来源于stack exchange,提问作者Lone Learner

