轉換和列舉型別
列舉型別是不可或缺的型別,因為任何列舉值可以轉換成其他整數類資料型別的整數提升。 請考量以下範例:
// 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";
}
Output
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.
前面的範例顯示轉換的一致的值與列舉值。 沒有任何可以讓您避免與其中一個列舉值轉換為一致的機制。 例如:
d = Days( 967 );
這類的轉換可能會運作。 但是,沒有結果值會是其中一個列舉值能保證。 此外,如果列舉值的大小太小,無法保留轉換的值,儲存的值將您的預期。