C/C++:enum的理解 / enum與int的相互轉換
如何正確理解enum型別?
例如:
- enum Color { red, white, blue};
- Color x;
我們應說x是Color型別的,而不應將x理解成enumeration型別,更不應將其理解成int型別。
我們再看enumeration型別:
- enum Color { red, white, blue};
(C程式設計師尤其要注意!)
理解此型別的最好的方法是將這個型別的值看成是red, white和blue,而不是簡單將看成int值。
C++編譯器提供了Color到int型別的轉換,上面的red, white和blue的值即為0,1,2,但是,你不應簡單將blue看成是2。blue是Color型別的,可以自動轉換成2,但對於C++編譯器來說,並不存在int到Color的自動轉換!(C編譯則提供了這個轉換)
例如以下程式碼說明了Color會自動轉換成int:
- enum Color { red, white, blue };
- void f()
- {
- int n;
- n = red; // change n to 0
- n = white; // change n to 1
- n = blue; // change n to 2
- }
以下程式碼也說明了Color會自動轉換成int:
- void f()
- {
- Color x = red;
- Color y = white;
- Color z = blue;
- int n;
- n = x; // change n to 0
- n = y; // change n to 1
- n = z; // change n to 2
- }
但是,C++編譯器並不提供從int轉換成Color的自動轉換:
- void f()
- {
- Color x;
- x = blue; // change x to blue
- x = 2; // compile-time error: can't convert int to Color
- }
若你真的要從int轉換成Color,應提供強制型別轉換:
- void f()
- {
- Color x;
- x = red; // change x to red
- x = Color(1); // change x to white
- x = Color(2); // change x to blue
- x = 2; // compile-time error: can't convert int to Color
- }
但你應保證從int轉換來的Color型別有意義。
本文轉載自:http://blog.csdn.net/lihao21/article/details/6825722
相關文章
- C++中的enum淺談C++
- object-c中NSString與int和float的相互轉換Object
- C#中Enum的用法C#
- 【C/C++】C和C++11之enum列舉的使用細節C++
- C++ int與string的轉化C++
- c與c++的相互呼叫C++
- C++實現任意進位制的相互轉換C++
- enum用法
- 認知列舉(C# Enum)C#
- C語言中關鍵字typedef、enum的使用C語言
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- 小心 Enum Parse 中的坑
- 深入掌握Java中的enumJava
- cpp:enum引出的那些事
- XML與DataSet的相互轉換XML
- c++中幾種常見的型別轉換。int與string的轉換,float與string的轉換以及string和long型別之間的相互轉換。to_string函式的實現和應用。C++型別函式
- C語言中字串與整數的相互轉換C語言字串
- C# enum列舉為0的時候不需要強制轉換,很容易掉坑C#
- 技術債! 怎樣簡潔高效的實現多個 Enum 自由轉換
- union, struct, enum 的 大小區別Struct
- Rust的列舉型別EnumRust型別
- ascii碼與字元的相互轉換ASCII字元
- C 語言整數與字串的相互轉換介紹字串
- C# byte陣列與Image相互轉換的方法C#陣列
- [原創] sql mode與 enum 型別SQL型別
- TypeScript 列舉enumTypeScript
- Java 列舉(enum)Java
- 使用列舉ENUM替換Switch或If-Else
- C++typedef宣告,enum列舉型別C++型別
- 徹底理解c++的隱式型別轉換C++型別
- Swift語言中class、struct、enum的聯絡與區別SwiftStruct
- dom4j 與 w3c document的相互轉換
- 要慎用mysql的enum欄位的原因MySql
- 聊一聊Java的列舉enumJava
- mysql 中set和enum的區別MySql
- xml與陣列的相互轉換——phpXML陣列PHP
- DOM物件與jquery物件的相互轉換物件jQuery
- jQuery物件與Dom物件的相互轉換jQuery物件