八葉の日記

日々、感じたことをまとめる場として利用する

Modern C++ enumにはスコープが設定できる

職場がC++11/14に対応してきたのですが、今までなんちゃってModern C++だったので復習を兼ねてメモ。

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

項目10:enumにはスコープを設ける

enum class Color { black, red, blue}; // C++11からはclassを付けるとスコープを限定できる

auto black = false;
//OK. C++98であるようにenum ColorだとNGになる
//enumの中の値が実質グローバル変数のようになる
//過去は対策として、enum Color = {color_black, ....}のようなことをしていた。

if (red < 10.2) //NG. 暗黙の型変換はできない
{
//
}

//別ヘッダファイルでは前方宣言可能
enum class Color; //前方宣言可能

まとめ:
・スコープを限定する→列挙子がグローバル変数になるのを避ける
・暗黙の型変換が不可になる
・前方宣言が減らせる→コンパイル時のファイル依存が減る