プロジェクトのどこかで最近見つけたコード構造を見てみましょう。
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キーワードを付加する必要がある理由を理解しているので、コンパイラは、同じ名前空間内の他のenumの値を使用せずに、指定されたenumの変数を宣言していることを明確に認識します。そもそもなぜそのような構造を作ることができるのか、私にはわかりません。