共用方式為


轉換和列舉型別

列舉型別是不可或缺的型別,因為任何列舉值可以轉換成其他整數類資料型別的整數提升。 請考量以下範例:

// 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";
}

bd77ckhw.collapse_all(zh-tw,VS.110).gifOutput

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 );

這類的轉換可能會運作。 但是,沒有結果值會是其中一個列舉值能保證。 此外,如果列舉值的大小太小,無法保留轉換的值,儲存的值將您的預期。

請參閱

參考

C + + 列舉宣告