簡體   English   中英

將基礎類型的任意值強制轉換為強類型枚舉類型是否安全?

[英]Is it safe to cast arbitrary values of the underlying type to a strongly-typed enum type?

如果我有一個強類型的枚舉,比如底層類型int ,是否可以將一個與枚舉類型不匹配的int值轉換為枚舉類型?

enum e1 : int { x = 0, y = 1 };
enum class e2 : int { x = 0, y = 1 };

int main() {
        e1 foo = static_cast<e1>(42); // is this UB?
        e2 bar = static_cast<e2>(42);
}

來自n3290,5.2.9 Static cast [expr.static.cast]:

10可以將整數或枚舉類型的值顯式轉換為枚舉類型。 如果原始值在枚舉值(7.2)的范圍內,則該值不變。 否則,結果值未指定(可能不在該范圍內)。 [...]

枚舉類型包括使用enum聲明的那些類型和使用enum classenum struct聲明的類型,標准分別調用未編組的枚舉和作用域枚舉。 在7.2枚舉聲明[dcl.enum]中有更詳細的描述。

枚舉類型的不會與其枚舉器混淆。 在你的情況下,由於枚舉你宣布都有int作為它們的基礎類型的值的范圍是相同的int :從INT_MININT_MAX (含)。

由於42具有int類型,並且顯然是int的值,因此定義了行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM