2017-02-09 63 views
1

假設我的代碼如下:分配enum整數值的規則是什麼?

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

多少我可以依靠的事實(例如StateSize==7)?

更具體地說,什麼是C++法則/規則來確定它們的值是什麼?

我覺得在SO中可能存在一個問題,但我找不到它。

+0

以防萬一,通常你會希望使用枚舉當你不希望跟蹤他們所代表的整數。 – synchronizer

+0

@synchronizer我也想操縱和比較它們。 :) – javaLover

+0

必須有幾個問題,以某種形式或另一種形式覆蓋此問題,例如[這一個](http://stackoverflow.com/q/21027298/1708801) –

回答

3

cppreference.com

引用如果第一枚舉不具有初始值設定時,相關值爲零。對於其定義沒有初始值設定項的任何其他枚舉項,關聯值是前一個枚舉項的值加1。

2

7.2枚舉聲明
如果第一枚舉不具有初始,對應恆定的 的值是零。沒有 初始值設定項的枚舉數定義爲枚舉數提供了通過將前一個枚舉數的 值增加1而獲得的值。

您可以依靠先前分配的枚舉值增加的值。

enum State{ 
    State0,  //=0 
    State1,  //=1 
    State2,  //=2 
    State5=5, //=5 
    State6,  //=6 
    StateSize //=7 
}; 
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 
+0

是什麼? – SU3

+1

編譯器的僞代碼,我猜。 – javaLover

+0

設置每個ID的值 –