char初始化枚举的基础类型应该是什么?

时间:2016-07-13 09:25:38

标签: c++ enums language-lawyer

在回答这个question about enums时,我阅读了有关基础尺寸的规范,并且说(关于无范围的枚举)[7.5.5]:

  

如果未修复基础类型,则每个枚举数的类型都是类型   其初始化值

但是当我尝试following code时,我得到sizeof int所有枚举(在g ++,VC和clang上测试过)。

#include <iostream>
using namespace std;
enum e1 { e1a };
enum class ec1 { ec1a };
enum e2 { e2a = 'a' }; // I expect this to have sizeof 1
enum class ec2 { ec2a = 'a' };

int main() {
    cout << "plain enum:" << sizeof(e1a) << endl;
    cout << "enum class:" << sizeof(ec1::ec1a) << endl;
    cout << "char initialized plain enum:" << sizeof(e2a) << endl;
    cout << "char initialized enum class:" << sizeof(ec2::ec2a) << endl;
}

输出:

  普通词:4
  枚举类:4
  char初始化简单枚举:4
  char初始化枚举类:4

我误解了什么?

1 个答案:

答案 0 :(得分:3)

你错过了这句话:

  

在enum-specifier的右括号之后,每个枚举器都有其枚举类型。

证明:

<div class="covered"></div>
<div class="covering"></div>

输出:

.covered{
  width: 200px; height: 200px;
  background: red;
  position: relative;
}
.covered:hover{
  background-color: green;
}

.covering{
  width: 200px; height: 200px;
  background: blue;
  position: relative;
  top: -100px;
}

.covered:before{
  content: "";
  display: block;
  position: absolute;
  z-index: 300;
  width: 100%; height: 100%;
}