#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++未命名的命名空間
#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++未命名的命名空間
::
在::a
指的是全局命名空間。匿名命名空間應該只通過a
訪問(或者更具體一點,你不應該這樣做)
使用未命名空間,這是不可能的。請參閱下面的文章
你必須去命名的命名空間。
不,你不能。您可以解決這樣說:
namespace
{
namespace xxx
{
int a = 1;
}
}
...
std::cout << xxx::a << ::b;
你可以訪問全局命名空間,但不要重新定義它。
#include <iostream>
namespace
{
int a=1;
}
int b=3;
int main(void)
{
std::cout<<::a<<::b;
return 0;
}
這裏出來是13
謝謝大家幫忙〜,我只是困惑全局命名空間和匿名命名空間〜 – Javran 2010-04-13 09:57:17
@visitor之間:訪問匿名一個或全局一個? – 2010-04-13 14:41:15
如果刪除了''::從由提問者給出的代碼,然後將代碼只編譯失敗(簡單'了'可以參考這兩種)。同樣,如果要刪除全局的'a',那麼'a'和':: a'似乎都是指未命名的'a'。 (對不起,但答案似乎只是完全錯誤的。) – UncleBens 2010-04-13 15:58:28