[解決済み】強型enumをintに自動変換する方法は?
2022-04-08 13:47:46
質問
#include <iostream>
struct a {
enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };
int foo(int input) { return input; }
int main(void) {
std::cout << foo(a::A1) << std::endl;
std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}
は
a::LOCAL_A
通常の列挙型は整数型に変換できますが、強く型付けされた列挙型はキャストしないと変換できません。
では、強く型付けされたenum値をキャストせずに整数型に変換する方法はあるのでしょうか?もしあるならば、どのように?
どのように解決するのですか?
強い型付けされた列挙型は、質問にあるようなスコーピングの問題だけでなく、複数の問題を解決することを目的としています。
- 型安全性を提供し、積分プロモーションによる整数への暗黙の変換をなくす。
- 基礎となる型を指定する。
- 強力なスコープを提供する。
したがって、強く型付けされたenumを暗黙のうちに整数型に変換することは不可能であり、その基礎となる型さえも変換できない--というのがその考えです。そのため
static_cast
を使用して、変換を明示的に行うことができます。
もし、スコープだけが問題で、暗黙のうちに整数に昇格させたいのであれば、強く型付けされた enum ではなく、宣言された構造体をスコープとするものを使う方がよいでしょう。
関連
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] intをQStringに変換する方法は?
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] std::stringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】enumを繰り返し処理する方法は?