C++相談室2

このエントリーをはてなブックマークに追加
enum(enumerate: イニューメレイト)ってのは、文字どおり「列挙型」です。
大抵の言語に備わっています。

たとえば
#define ONE 1
#define TWO 2
#define THREE 3
#define NINE 9
#define TEN 10

enum 《ここで列挙型の名前を定義できる》{
ONE,
TWO,
THREE,
NINE = 9,
TEN
};
と書けます。

違いは、ONE/TWO/…などが #define だとプリプロセッサで展開される(コンパイラには見えない)のに対して、
enum だとそれらを識別子としてコンパイラが認識する…ってことかな。

これはコンパイラが型チェックできることを意味しています。
型チェックの結果は C と C++ で違います。
たとえば、どちらの場合も変数の型は int 類になるけど、
#define だとそこに定義されていない値を入れても、
コンパイラは「あれっ?」とも思いません。

でも enum だとコンパイラがそれを型として認識できるので、
これが C++ だと、明示的に型キャストしない限り、
コンパイラが「あれっ?」と思ってくれます。