簡體   English   中英

將范圍枚舉轉換為int

[英]Convert scoped enum to int

為什么不能將帶范圍的枚舉隱式轉換為int? 如果我有

enum class Foo:uint32_t{...};

然后我知道Foo覆蓋的整數是uint32_t覆蓋的整數的子集,所以我應該總是安全的。 我在這里錯過了一些怪癖嗎? 但相反的情況並不安全。

僅僅因為這樣的轉換總能成功並不意味着你希望它是隱含的。

范圍枚舉的整個目的是它們是不同的類型,在重載解析期間不會導致混亂的結果。

明確是好的。

正如LightnessRacesinOrbit在他的回答中解釋的那樣,范圍枚舉的整個目的是禁止隱式轉換為基礎類型。

您可以通過static_cast顯式轉換它們,但如果您希望能夠指定基礎類型,同時允許隱式轉換,您也可以使用常規枚舉,只需從定義中刪除class關鍵字。

enum class Foo1 : uint32_t{ THING };
enum /*class*/ Foo2 : uint32_t{ THING };

uint32_t conv1 = static_cast<uint32_t>(Foo1::THING);
uint32_t conv2 = Foo2::THING;  // <-- implicit conversion!

暫無
暫無

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

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