コード スニペットを考えてみましょう:
enum class Color : char { red = 0x1, yellow = 0x2 }; char *data = ReadFile(); Color color = static_cast<Color>(data[0]);
何が起こるかdata[0]が100のとき? C 11 および C 14 標準によれば、結果の値は未指定であり、どのようなものでもよいことを意味します。
ただし、CWG 1766 以降、列挙型の範囲外の値を列挙型にキャストできるようになりました。未定義動作 (UB) を呼び出します。この変更は、C 11 および C 14 コンパイル モードに欠陥を適用することを選択したコンパイラ実装にのみ影響します。
スイッチ内ステートメントでは、条件は整数型に変換されます。スコープのない列挙の場合、この変換は整数に適用されます。スコープ付き列挙型 (enum クラスと enum 構造体) の場合、昇格は行われません。いずれにせよ、条件値は基になる型と int の範囲内にあるため、デフォルトのラベルがヒットするはずです。
enum ColorUnfixed { red = 0x1, yellow = 0x2 };
以上がC で無効な値を Enum クラスにキャストするとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。