0

私は C++ で列挙型をいじっていますが、次の 2 つの例をまだ理解できません。

enum Colors {
    WHITE, BLACK, RED
};

Colors colors[3];
colors[0] = WHITE; // it's OK

と:

enum Colors {
    WHITE, BLACK, RED
};

int colors[3];
colors[0] = WHITE; // it's OK

列挙の要素は 0 から n-1 までカウントされるため、すべての要素に値があることがわかっています。しかし、配列を宣言するために列挙型の Colors 名を使用する必要があるのはなぜですか? 代わりに int を使用できないのはなぜですか? それともできますか?

ありがとう。

4

3 に答える 3

2

しかし、配列を宣言するために列挙型の Colors 名を使用する必要があるのはなぜですか? 代わりに int を使用できないのはなぜですか? それともできますか?

はい、変数を としてint宣言する代わりにとして宣言することもできますが、 an を使用することColorsの要点は、開発者とコンパイラの両方が許容値が制限されていることを伝えることができるということです。さらに、コンパイラはこの情報を使用して診断を発行し、開発者が間違いを回避できるようにします。enum

int color1 = WHITE; // OK
int color1 = 0; // OK, no diagnostic, but what does 0 mean ?
Colors color2 = WHITE; // OK
Colors color2 = 0; // compilation warning or error
于 2013-03-02T10:11:55.833 に答える
2

では、 ~の間のenum値に英語名を使用できます。次の開発者が持っているほうがはるかにきれいでわかりやすい0n-1

int myColor = Colors::WHITE;

よりも

int myColor = 0; // What color is this? I don't know
于 2013-03-02T10:03:29.240 に答える
2

しかし、配列を宣言するために列挙型の Colors 名を使用する必要があるのはなぜですか? 代わりに int を使用できないのはなぜですか? それともできますか?

あなたはできる:

enum {
    WHITE,
    BLACK
};

int arr[3];
arr[0] = WHITE;
于 2013-03-02T10:04:20.497 に答える