ホームページ > バックエンド開発 > C++ > C で無効な値を Enum クラスにキャストするとどうなりますか?

C で無効な値を Enum クラスにキャストするとどうなりますか?

DDD
リリース: 2024-12-24 20:22:12
オリジナル
364 人が閲覧しました

What Happens When Casting an Invalid Value to an Enum Class in C  ?

Enum クラスへの無効な値のキャストの影響

コード スニペットを考えてみましょう:

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: 動作の変更

ただし、CWG 1766 以降、列挙型の範囲外の値を列挙型にキャストできるようになりました。未定義動作 (UB) を呼び出します。この変更は、C 11 および C 14 コンパイル モードに欠陥を適用することを選択したコンパイラ実装にのみ影響します。

Switch ステートメントの統合プロモーション

スイッチ内ステートメントでは、条件は整数型に変換されます。スコープのない列挙の場合、この変換は整数に適用されます。スコープ付き列挙型 (enum クラスと enum 構造体) の場合、昇格は行われません。いずれにせよ、条件値は基になる型と int の範囲内にあるため、デフォルトのラベルがヒットするはずです。

スコープ外の列挙に関する注意

enum ColorUnfixed { red = 0x1, yellow = 0x2 };
ログイン後にコピー
For固定の基礎となる型を持たない列挙型の場合、範囲外の値をキャストすると、不特定の動作 (CWG 1766 以前) または UB (CWG 1766 以降) が発生する可能性があります。 CWG 1766)。これは、列挙型 ColorUnfixed で示されます。

基礎となる型が固定されていないため、ColorUnfixed の範囲は 0 ~ 3 であり、100 は無効な値になります。

以上がC で無効な値を Enum クラスにキャストするとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート