首頁 > 後端開發 > C++ > 將無效值轉換為 C 中的枚舉類別時會發生什麼?

將無效值轉換為 C 中的枚舉類別時會發生什麼?

DDD
發布: 2024-12-24 20:22:12
原創
370 人瀏覽過

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

將無效值轉換為枚舉類別的影響

考慮程式碼片段:

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 語句中的整體提升

在 switch 中語句中,條件轉換為整數。對於無作用域枚舉,此轉換適用於整數;對於作用域枚舉(枚舉類別和枚舉結構),不會發生提升。無論如何,條件值在基礎類型和 int 的範圍內,因此仍應命中預設標籤。

注意無作用域枚舉

For沒有固定基礎類型的枚舉,將值轉換到範圍之外可能會導致未指定的行為(在CWG 1766 之前)或UB(在CWG 1766)。這可以用列舉 ColorUnfixed 來說明:

enum ColorUnfixed { red = 0x1, yellow = 0x2 };
登入後複製

由於基礎型別不固定,ColorUnfixed 的範圍是從 0 到 3,因此 100 是無效值。

以上是將無效值轉換為 C 中的枚舉類別時會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板