2
$ 10.2/4“[注:寻找一个名字在 精心设计的类型说明符(3.4.4) 或碱符(第10条),为 例如,忽略所有无类型 声明,同时在嵌套名称说明符中查找名称 (3.4.3) 忽略函数,变量和 枚举数声明。名称查找澄清
我发现这个说法在描述名称查找的过程中很混乱。
void S(){}
struct S{
S(){cout << 1;}
void f(){}
static const int x = 0;
};
int main(){
struct S *p = new struct ::S; // here ::S refers to type
p->::S::f();
S::x; // base specifier, ignores the function declaration 'S'
::S(); // nested name specifier, ignores the struct declaration 'S'.
delete p;
}
我的问题:
是我对规则的理解是否正确?
为什么
::S
上线做新的自动处理,意味着结构S
,而在最后一行::S
装置的功能,在全局命名空间S
。这是否意味着文档中的含糊不清或者是否还有一天让我远离C++标准文档?
Ouch。编译器应该在第3行左右停下来,并告诉你重构你的代码。 – 2010-11-04 06:05:44
@Greg Hewgill:哦,誓言!编译器和重构。创新是最好的! – Chubsdad 2010-11-04 06:10:34
>>我还有一天离开C++标准文档吗? - 是的。 – 2010-11-04 08:06:03