変換、および列挙型
列挙型が整数型であるため列挙子には必要な上位変換によって別の整数型に変換できます。次の例について考えます。
// enumerated_types.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
enum Days
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
int i;
Days d = Thursday;
int main()
{
i = d; // Converted by integral promotion.
cout << "i = " << i << "\n";
}
出力
i = 4
ただし列挙型から整数型への暗黙の型変換はありません。したがって上の例で続行されます)次のステートメントが正しくない :
d = 6; // Erroneous attempt to set d to Saturday.
暗黙の型変換が行われない場合にこのような型で変換を実行するにはキャストを使用する必要があります :
d = (Days)6; // Explicit cast-style conversion to type Days.
d = Days( 4 ); // Explicit function-style conversion to type Days.
前の例では列挙子と一致する値の変換を示します。保護列挙子の 1 人と一致しない値変換の機能はありません。次に例を示します。
d = Days( 967 );
そのような変換が有効である場合があります。ただし結果の値が列挙子の 1 つがであるという保証はありません。また列挙子のサイズが変換された値を保持するには大きすぎるも小さい場合格納されている値が予期したとおりになる可能性があります。