关于C ++未命名的命名空间

时间:2010-04-13 09:39:00

标签: c++ namespaces

#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的方法吗?

4 个答案:

答案 0 :(得分:3)

不,你不能。你可以解决这个问题:

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

答案 1 :(得分:3)

::中的

::a指的是全局命名空间。应该只通过a访问匿名命名空间(或者更具体地说,你根本不应该这样做)

答案 2 :(得分:2)

使用未命名的命名空间,这是不可能的。请参阅以下文章

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/unnamed_namespaces.htm

你必须去命名命名空间。

答案 3 :(得分:0)

您可以访问全局命名空间,但不要重新定义它。

#include <iostream>

namespace
{
        int a=1;
}


int b=3;

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

这里的出局是13。