C++ 11标准中的哪一节规定了原始数据类型大小之间的相对排序?

Lon*_*ner 3 c++ types c++11

我试图找出C++标准是否指定了各种类型的大小之间的关系.例如,https : //stackoverflow.com/a/589599/1175080上的答案似乎声称:

sizeof(short int) <= sizeof(int) <= sizeof(long int)
Run Code Online (Sandbox Code Playgroud)

/sf/answers/41277911/的另一个答案有类似的说法:

sizeof(int) <= sizeof(long)
Run Code Online (Sandbox Code Playgroud)

我正在经历n3337.pdf(我相信C + 11标准的良好代理)但我找不到保证这些不等式的特定语言.

n1256(C99)中,我可以在第5.2.4.2.1节中找到特定语言.整数类型的大小清楚地说明了每种类型的最小值和最大值,这些值间接地建立了大小之间的相对排序.

这些不等式是否在C++标准中类似地定义,还是直接从C继承?标准中的语言在哪里?

Hol*_*olt 8

在n3337中,该部分是3.9.1,[basic.fundamental]/2,第二段(重点是我的):

有五种标准的有符号整数类型:"signed char","short int","int","long int"和"long long int".在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间.也可能存在实现定义的扩展有符号整数类型.标准和扩展有符号整数类型统称为有符号整数类型.简单的int具有执行环境的体系结构建议的自然大小44; 提供其他有符号整数类型以满足特殊需求.


请注意,C标准中的5.2.4.2/1仅定义了每个整数类型的最小范围,它不强制执行排序 - 我可以int从-32767到32767以及short从-2147483647到2147483647,并且仍然符合本节的要求.

然而6.2.5.8更加明确:

对于具有相同签名和不同整数转换等级的任何两个整数类型(参见6.3.1.1),具有较小整数转换等级的类型的值范围是另一种类型的值的子范围.

6.3.1.1告诉你:

long long int的等级应大于long int的等级,该等级应大于int的等级,其应大于short int的等级,short rank应大于signed char的等级.