在C ++标准中,它表示sizeof(wchar_t)< = sizeof(long)和sizeof(bool)< = sizeof(long)?

时间:2013-12-12 19:30:36

标签: c++ c++11 sizeof

先生。 Stroustrup在他的新书(TCPL第4版)的第149页上写了以下内容

1 <= sizeof(wchar_t) <= sizeof(long)

我在标准中找不到任何支持上述不等式的内容。我可以对sizeof(bool) <= sizeof(long)说同样的话。

修改:在3.9.1p5中,您会找到:

  

类型wchar_t应具有与其他整数类型相同的大小,符号和对齐要求(3.11),称为其基础类型。

支持不平等

sizeof(wchar_t) <= sizeof(long long)

但不是

sizeof(wchar_t) <= sizeof(long)

但我找不到确认的内容

sizeof(bool) <= sizeof(long)

1 个答案:

答案 0 :(得分:6)

很难想象任何N值的sizeof(wchar_t)>N && sizeof(long)<=N实现,更不用说任何人都会考虑使用wchar_t。那说:

事实上,我认为这是错误的。 4.5“整体促销”p2明确允许:

  

2. char16_t,char32_t或wchar_t(3.9.1)类型的prvalue可以转换为第一个的prvalue   以下类型可以表示其基础类型的所有值:int,unsigned int,long int,   unsigned long int,long long int或unsigned long long int。 如果该列表中没有任何类型可以   表示其基础类型的所有值 ,类型为char16_t,char32_t或wchar_t的prvalue可以是   转换为其基础类型的prvalue。

和5.3.3“sizeof”p1明确地保留了实现定义的实际大小:

  

1. [...] sizeof应用于任何其他基本类型(3.9.1)的结果是   实现定义。 [ *注意:特别是sizeof(bool),sizeof(char16_t),sizeof(char32_t)和   sizeof(wchar_t)是实现定义的。*    76 - 结束注释] [注意:字节的定义见1.7   和3.9用于对象表示的定义。 - 结束说明]

虽然5.3.3足以让相对大小值得怀疑,但我认为wchar_t在任何标准类型中无法代表的规范性可能性使其毫无疑问。