2011-01-07 14 views
26

私は最初のものを理解しますが、2番目のものは分かりますか?いつ、なぜあなたはそれをしますか?変数名なしのenumの使用

enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE }; 

enum { HOMER, MARGE, BART, LISA, MAGGIE }; 
+4

あなたがシンプソンズを見過ぎたとき??? –

+4

そのようなものはありません。 –

+0

@ノア:おそらくそれは実際には違法で、私は誤解を招くと思っていましたので、g ++の私の例に似たテストをまとめました。これはコンパイルされ、正常に実行されますが、私が実際にチェックしたオンライン参照はこの構文オプションを表示しません。 – davka

答えて

24

class Encryption { 
public: 
    enum { DEFAUTL_KEYLEN=16, SHORT_KEYLEN=8, LONG_KEYLEN=32 }; 
    // ... 
}; 

byte key[Encryption::DEFAUTL_KEYLEN]; 
+2

今、私はあなたがどのように使用/アクセスしたのか疑問に思っていました。したがって、ClassName :: enum値を使ってスコープを作成し、それを使用するので、基本的にenum {blah、hah、lol}はClassName :: blahなどでアクセスできます。ありがとう。 – RoR

6

これは単にあなたが何のための型として、名前の列挙型を使用することはできませんので、あなたは、単にintとを受け入れる必要があります、単にint以外のタイプなしで、それぞれの値を持つ定数式を作成します定数との比較を行います。

このような何か:このような何か対

void doSomething(int c); 

:ところで

void doSomething(cartoon c); 

、あなたの実装では、その名前のない列挙型の場合には、唯一の本当の欠点と同じになります強いタイピングです。

+0

実際には定数ではなく、*定数式*です。時には大きな違いがあります。たとえば、参照またはアドレスを定数に使用できます。あなたは列挙記号でそれをすることはできません。 –

4

enum、共用体、構造体およびクラスの共通部分が構文内にあります。同じ このunamedパターンはランダムに使用されます。 しかし、いつかこれを見つけるかもしれません。

typedef enum { HOMER, MARGE, BART, LISA, MAGGIE } cartoont; 

それとも、少数の状態を含む単一の変数を持っている場合。

enum { HOMER, MARGE, BART, LISA, MAGGIE } my_var; 

これは、次の宣言を避けます。

enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE }; 
cartoon my_var; 
6

第2番目の名前は、enumです。フィールドが必要なときに便利ですが、この列挙型の変数を宣言するつもりはありません。

非常にC++の使用例を提供するには、このタイプの変数を宣言することを意識することなく、コンパイル時の戻り値としてenumが使用されるテンプレートのメタプログラミングでこれをよく見ます。

あなたは、それをスコープを与え、クラスの機能を公開することができます クラス、で例えば、このような列挙型を定義することができ
template<class T> 
struct some_metafunction 
{ 
    enum { res = 0; }; 
}; 
+0

'= 0;'部分は実際には必要ですか? –

+0

@Jacobそれはそうではありませんが、単なる例です(通常は 'res'の値は' T'に依存します) – icecrime

2

私は組み込みプロジェクトで遭遇した匿名の列挙型の実際の使用例を提供しています。 プロジェクトでは、EEPROMを使用していくつかのパラメータを保存します。これらのパラメータがカートンのcharaterの年齢であると仮定しましょう。各パラメータのサイズは連続した1バイトです。

これらのパラメータは、プロセッサの電源を入れたときにROMに格納されたアレイにコピーされます。私たちはここにanomymous列挙型定義する場合

uint8_t ROM_AGE[END_AGE] 

enum { HOMER_AGE, MARGE_AGE, BART_AGE, LISA_AGE, MAGGIE_AGE, END_AGE }; 

を次に列挙中のキーワードはROM_AGE[HOMER_AGE]のような各キャラクターの年齢インデックスに使用することができます。 この列挙型を使用すると、可読性はROM_AGE[0]を使用するよりはるかに優れています。

関連する問題