部分N4296::7.2/11 [dcl.enum]
:
每个枚举名称和每个未作用域的枚举器都在作用域中声明 它立即包含枚举说明符。每个范围的枚举器 在枚举范围内声明。这些名字遵守 范围规则为(3.3)和(3.4)中的所有名称定义。
所以这意味着,未编译的枚举数不会在枚举范围内声明,而是在范围内声明,立即包含它们。那么,为什么限定名称查找会找到这样的枚举器?
#include <iostream>
enum A{ x = -2, y = 2 };
int a = x;
int b = A::y; //OK, but it's not clear why?
int main()
{
std::cout << b << std::endl;
}
答案 0 :(得分:2)
这是标准中的一项特殊规则。
以提名枚举类型的 nested-name-specifier 为前缀的名称应代表该枚举的枚举数。
(C ++ 11 [basic.lookup.qual] / 5; N4296中相同)