首頁 >後端開發 >C++ >C 中的強型別枚舉可以自動轉換為整數嗎?

C 中的強型別枚舉可以自動轉換為整數嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 22:30:03910瀏覽

Can Strongly Typed Enums Be Automatically Converted to Integers in C  ?

自動將強型別枚舉轉換為整數

在C 中,枚舉有兩種風格:強型態枚舉和常規枚舉。常規枚舉可以隱式轉換為整數,而強型別枚舉需要明確轉換。這就提出了一個問題:是否有一種自動方法可以將強型別枚舉轉換為整數,而無需使用明確強制轉換?

答案是否定的,而且這是有意為之。強型別枚舉旨在防止隱式轉換為整數。本質上,編譯器確保您明確確認從枚舉值到整數的轉換。

但是,有一種解決方法可以避免在強制轉換中指定基礎類型。透過利用模板函數,我們可以抽像出強制轉換的型別規範。

<code class="cpp">template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
    return static_cast<typename std::underlying_type<E>::type>(e);
}</code>

使用此模板函數,可以實現如下轉換:

<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;</code>

這種方法消除了強制轉換中的顯式類型規範,簡化了轉換過程,同時保持了強型別枚舉的強制明確轉換所需的行為。

以上是C 中的強型別枚舉可以自動轉換為整數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn