簡體   English   中英

如何在 C++ 中將 int 轉換為枚舉?

[英]How to cast int to enum in C++?

如何將 int 轉換為 C++ 中的枚舉?

例如:

enum Test
{
    A, B
};

int a = 1;

如何將a轉換為類型Test::A

int i = 1;
Test val = static_cast<Test>(i);
Test e = static_cast<Test>(1);

你的代碼

enum Test
{
    A, B
}

int a = 1;

解決方案

Test castEnum = static_cast<Test>(a);

分拆結束的問題,“我如何將 a 轉換為類型Test::A ”,而不是嚴格要求在那里有一個演員,並且遲到幾年才回答,因為這似乎是一個受歡迎的問題,沒有其他人根據 C++11 標准提到了替代方案:

5.2.9 靜態轉換

... 如果聲明T t(e);則表達式e可以使用static_cast static_cast<T>(e)形式的 static_cast 顯式轉換為類型T 對於一些發明的臨時變量t (8.5) 是良構的。 這種顯式轉換的效果與執行聲明和初始化,然后使用臨時變量作為轉換的結果相同。

因此,直接使用t(e)形式也可以,您可能更喜歡它的簡潔性:

auto result = Test(a);

Test castEnum = static_cast<Test>(a-1); a投射到A 如果您不想子結構 1,您可以重新定義enum

enum Test
{
    A:1, B
};

在這種情況下Test castEnum = static_cast<Test>(a); 可用於將a強制轉換為A

順便提一下,如果enum的底層類型恰好是固定的,從 C++17 開始,可以簡單地寫

enum Test : int {A, B};
int a = 1;
Test val{a};

當然還有Test val{1}; 也是有效的。

相關的cppreference部分內容如下(強調我的):

如果滿足以下所有條件,則可以使用列表初始化從不進行強制轉換的整數初始化枚舉:

  • 初始化是直接列表初始化
  • 初始化列表只有一個元素
  • 枚舉是作用域的或非作用域的,基礎類型是固定的
  • 轉換是非縮小的

暫無
暫無

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

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