![](/img/trans.png)
[英]Why can't C++11 strongly-typed enum be cast to underlying type via pointer?
[英]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 class
或enum struct
聲明的類型,標准分別調用未編組的枚舉和作用域枚舉。 在7.2枚舉聲明[dcl.enum]中有更詳細的描述。
枚舉類型的值不會與其枚舉器混淆。 在你的情況下,由於枚舉你宣布都有int
作為它們的基礎類型的值的范圍是相同的int
:從INT_MIN
到INT_MAX
(含)。
由於42
具有int
類型,並且顯然是int
的值,因此定義了行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.