まず、cppreference.com によると、列挙型を値で初期化することはやや不可能です。
http://en.cppreference.com/w/cpp/language/value_initializationによると、列挙型を値で初期化すると、実際にはゼロ初期化が実行されます。次に、http://en.cppreference.com/w/cpp/language/zero_initializationによると、列挙型をゼロ初期化する効果は次のとおりです。
がスカラー型の場合
T
、オブジェクトの初期値は、暗黙的に に変換された整数定数ゼロT
です。
ただし、整数定数ゼロは暗黙的に列挙型に変換できません。最終的に、列挙型を値で初期化することはできません。これは奇妙に聞こえますが、enum の値の初期化は VC、GCC、および clang で機能します。それで、標準はこれについて何と言っていますか?
次に、http ://en.cppreference.com/w/cpp/language/static_cast によると:
整数、浮動小数点、または列挙型は、任意の完全な列挙型に変換できます (結果は未定義です (C++17 まで) 未定義の動作 (C++17 以降) 式の値が列挙型の基になる型に変換される場合) 、対象の列挙値の 1 つではありません)
それで、これは、列挙型を値で初期化すると(それが機能する場合)、ターゲット列挙型に等しい列挙子がない場合、実際には未定義の動作につながる可能性があることを意味します0
か?