2010-04-13 58 views
3
#include <iostream> 

namespace 
{ 
     int a=1; 
} 

int a=2,b=3; 

int main(void) 
{ 
     std::cout<<::a<<::b; 
     return 0; 
} 

我用我的g ++編譯它,但輸出是23, 誰能解釋一下? 是一種訪問<unnamed> namespace ::a的方法嗎?一些關於C++未命名的命名空間

回答

3

::::a指的是全局命名空間。匿名命名空間應該只通過a訪問(或者更具體一點,你不應該這樣做)

+0

謝謝大家幫忙〜,我只是困惑全局命名空間和匿名命名空間〜 – Javran 2010-04-13 09:57:17

+0

@visitor之間:訪問匿名一個或全局一個? – 2010-04-13 14:41:15

+0

如果刪除了''::從由提問者給出的代碼,然後將代碼只編譯失敗(簡單'了'可以參考這兩種)。同樣,如果要刪除全局的'a',那麼'a'和':: a'似乎都是指未命名的'a'。 (對不起,但答案似乎只是完全錯誤的。) – UncleBens 2010-04-13 15:58:28

3

不,你不能。您可以解決這樣說:

namespace 
{ 
    namespace xxx 
    { 
     int a = 1; 
    } 
} 
... 
std::cout << xxx::a << ::b; 
0

你可以訪問全局命名空間,但不要重新定義它。

#include <iostream> 

namespace 
{ 
     int a=1; 
} 


int b=3; 

int main(void) 
{ 
     std::cout<<::a<<::b; 
    return 0; 
} 

這裏出來是13