爲什麼在C++中不允許在同一個塊中聲明兩個具有相同值的枚舉?具有相同值的枚舉類型
enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal
爲什麼在C++中不允許在同一個塊中聲明兩個具有相同值的枚舉?具有相同值的枚舉類型
enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal
C++ 03 enum
在其範圍內沒有更嚴格的類型檢查。所以math_students::A
和comp_students::A
都可以簡稱爲A
。這就是爲什麼他們不能在同一個範圍內。
爲了克服這一點,你可以把它們放在namespace
或class
。
namespace math_students {
enum { A, B, C };
}
namespace comp_students {
enum { D, E, A }; // ok
}
在C++ 11可以使用enum class
(它有更嚴格的類型檢查,他們沒有得到隱式轉換爲int
)。
enum class math_students {A,B,C};
enum class comp_students {D,E,A}; // ok
您可以通過它們的名稱引用這些值,這樣就會模糊不清。
enum中的值沒有作用域。枚舉的成員可以直接通過他們的名字來訪問。因此,如果多個枚舉具有相同名稱的成員,將會有一個命名衝突。
對於C++ 0x語法,我強烈建議使用C++ 0x的人有系統地遷移到* scoped枚舉*。 –
+1。請注意,* unnamed *枚舉不會作爲模板參數。 – Nawaz
在OP中,我可以創建一個接受math_students'foobar(math_students val)'的函數。如果我將它們放在類或名稱空間中,這是不可能的嗎? –