赋值整数值的规则是什么?

时间:2017-02-09 04:40:51

标签: c++ c++11 enums language-lawyer

假设我编码:

enum State{
    State0,                //=0
    State1,                //=1
    State2,                //=2
    State5 = State2+3,     //=5
    State6 = State5+1,     //=6
    StateSize = State6+1   //=7
};

我可以依赖这个事实多少(例如StateSize==7)?

更具体地说,确定它们的值是什么的C ++法律/规则是什么?

我觉得在SO中可能存在一个问题,但我找不到它。

3 个答案:

答案 0 :(得分:3)

引自cppreference.com

  

如果第一个枚举器没有初始值设定项,则关联值为零。对于其定义没有初始值设定项的任何其他枚举器,关联值是前一个枚举器的值加1。

答案 1 :(得分:2)

  

7.2枚举声明
  如果第一个枚举器没有初始化器,则该值为   相应的常数为零。没有的枚举器定义   初始化程序为枚举数提供通过增加得到的值   上一个枚举器的值为1。

您可以依赖于先前指定的枚举值递增的值。

enum State{
    State0,     //=0
    State1,     //=1
    State2,     //=2
    State5=5,   //=5
    State6,     //=6
    StateSize   //=7
};

答案 2 :(得分:0)

伪码:

initial: cnt = 0
for each `enumor` in `enum specifier`
begin
    if `enumor` is in the form of `ID = ConstExp`
        let ID = ConstExp
        cnt = ConstExp
    else
        let ID = cnt
        cnt = cnt + 1
    endif
end