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