次の形式の enum クラス変数のインスタンス化に遭遇しましたが、VS2012 で警告やエラーなしでコンパイルしています。
UINT32 id;
enum class X {apple, pear, orange};
X myX = X(id);
X(id)
さらに、コンパイル済みの X 型 param を期待する関数に引数として送信します。結果が常に正しいのか、それともコンパイラの奇妙な動作なのかはわかりません。
ただし、上記の代わりに実行しようとするX myX(id);
と、コンパイル エラーが発生しました。
エラー C2440: '初期化中': 'UINT32' から 'X' に変換できません。列挙型への変換には、明示的なキャスト (static_cast、C スタイルのキャスト、または関数スタイルのキャスト) が必要です。
C++11 標準を読んでも、理解するのに役立ちませんでした。だから私はこの件に関して2つの質問があります:
- 整数型をパラメーターとして列挙型クラス オブジェクトを構築することは可能ですか?
- 1 が true の場合、なぜ
X myX(id)
機能しないのですか?