読者です 読者をやめる 読者になる 読者になる

enum classをintに変換

C++

C++0xで導入されるenum classは、C++03までのenumよりも型付けが
強くなっているのでint型への暗黙の型変換はできなくなっています。

enum class Color {
    Blue = 0,
    Yello,
    Red
};

int color = Color::Red; // エラー!Colorからintへ変換できません

明示的な型変換ならいけるかな、と思ったのでenum classを実装しているGCC 4.4で試してみました。

int color = static_cast<int>(Color::Red); // OK : colorは2

明示的な型変換はできるみたいです。


intからenum classへの変換も、明示的な型変換をすればいけます。

void foo(Color color) {}

foo(2);                     // エラー!第1引数をintからColorへ変換できません
foo(static_cast<Color>(2)); // OK

intとenumは相互変換することがけっこうあり、enum classも同様のことができるようなので
enum classは完全にBetter enumとして使用できそうです。