代码之家  ›  专栏  ›  技术社区  ›  Javran

关于C++未命名命名空间的一些问题

  •  3
  • Javran  · 技术社区  · 15 年前
    #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 回复  |  直到 15 年前
        1
  •  3
  •   Viktor Sehr    15 年前

    :: 在里面 ::a 引用全局命名空间。匿名命名空间应该通过 a (或者更具体地说,你根本不应该这样做)

        2
  •  3
  •   Marcelo Cantos    15 年前

    不,你不能。你可以这样做:

    namespace
    {
        namespace xxx
        {
            int a = 1;
        }
    }
    ...
    std::cout << xxx::a << ::b;
    
        3
  •  2
  •   bdhar    15 年前

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

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

    必须使用命名名称空间。

        4
  •  0
  •   sbi    15 年前

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

    #include <iostream>
    
    namespace
    {
            int a=1;
    }
    
    
    int b=3;
    
    int main(void)
    {
            std::cout<<::a<<::b;
        return 0;
    }
    

    这里是13号。

    推荐文章