2017-02-09 10 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++の法律/ルールは、その値が何であるかを決定するものですか?

私はこれについての質問があるかもしれないと感じますが、私はそれを見つけることができません。

+0

念のため、通常、あなたがそれらが表す整数を追跡したくない場合に列挙型を使用したいと思うでしょう。 – synchronizer

+0

@synchronizerまた、それらを操作して比較したいと思います。 :) – javaLover

+0

いくつかの形式や別のものでこれをカバーするいくつかの質問がある必要があります(例えば、[this one](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の値を設定してください –

関連する問題