讓我們一碼構造是我最近在項目的某個地方找到:枚舉值碰撞枚舉名
namespace Test
{
enum EName
{
CoolEnum,
NiceEnum
};
enum CoolEnum
{
CoolVal1,
CoolVal2
};
enum NiceEnum
{
NiceVal1,
NiceVal2
};
}
我的問題是,爲什麼編譯器允許這樣的事情。我們來看一個代碼示例:
Test::CoolEnum cEnum = Test::NiceVal1; // INVALID, as compiler refers to Test::CoolEnum value of Test::Ename enum
爲什麼這樣的混淆允許?我明白爲什麼必須預先加入enum關鍵字,所以編譯器清楚地知道我聲明瞭一個給定枚舉的變量,而不是在同一個命名空間中使用其他枚舉的值。我只是不明白爲什麼首先它甚至有可能做出這樣的建設。
我想這是編譯器定義的,因爲在Ideone代碼導致錯誤:http://ideone.com/4GDTF – tinman 2012-07-06 14:06:21
這就是爲什麼我已經放在GCC但據我所知VC還允許這樣的建築 – 2012-07-06 14:08:27
@Kamil您可能希望改變NiceEnum的枚舉常量的名稱,因爲你從CoolEnum複製它並且它們發生衝突。 – 2012-07-06 21:38:58