我试图了解C ++标准对各种基本类型的位大小所保证的内容。为了解决这个问题,我们只需要担心bool
,char
,short
,int
,long
,long long
,{{1 }}和float
。
我了解到,实际上,这些类型的大小很少会偏离狭窄的可能性范围。这个问题是关于标准所保证的。
这是我从the standard中提炼出来的规则:
double
被定义为一个字节(5.3.3.1)。一个字节必须至少具有8位,因为它必须能够包含“ Unicode UTF-8编码形式的八位代码单元”(1.7.1)。char
。鉴于上述情况,这意味着这五种类型必须分别至少为8位。根据cppreference.com,这些附加规则适用:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
必须为> = 16位short
必须为> = 32位long
必须为> = 64位但是,我找不到这些规则在标准中的规定位置。它们不在我可能期望的3.9.1.2中,实际上5.3.3.1说:“ sizeof的结果适用于[long long
,char
或{{ 1}}]是实现定义的。”
该标准实际上施加了规则3、4和5吗?我对规则1和2正确吗?还有关于这些基本类型中任何一种的位大小的其他规则吗?