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

Wak*_*zil 4 c++ sizeof c++11

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

1 <= sizeof(wchar_t) <= sizeof(long)
Run Code Online (Sandbox Code Playgroud)

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

编辑:3.9.1p5 你会发现:

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

这支持了不平等

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

但不是

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

但我找不到任何确认的东西

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

jth*_*ill 6

很难想象 sizeof(wchar_t)>N && sizeof(long)<=N任何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 - 结束注释] [注意:有关byte和3.9的定义,请参阅1.7用于对象表示的定义. - 结束说明]

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