c – 如何访问嵌套在命名空间中的未命名命名空间变量?

此问题已在链接中进行了讨论

unnamed namespace within named namespace但没有提供关于如何访问嵌套在命名空间下的未命名命名空间变量的完美答案,以防两个变量相同

考虑本规范

namespace apple {   
    namespace {
                 int a=10;
                 int b=10;
              }
   int a=20;
}


int main()
{
cout<<apple::b; //prints 10
cout<<apple::a; // prints 20
}

未命名的命名空间“变量a”始终是隐藏的.如何访问未命名的命名空间的“变量a”?

在命名空间中声明未命名的命名空间是否合法?

最佳答案

unnamed namespace "variable a" is always hidden. How to access "variable a" of unnamed namespace?

看起来你根本无法限定封闭命名空间之外的未命名命名空间.

好吧,这是如何解决歧义:

namespace apple {   
    namespace {
        int a=10;
    }

    int getPrivateA() {
        return a;
    }

    int a=20;
}

int main() {
    cout<<apple::getPrivateA() << endl;
    cout<<apple::a << endl;
}

Live Demo.

虽然我知道没有完全回答你的问题(除了将未命名的命名空间嵌套在另一个命名空间内是合法的).
我将不得不调查c++ standard specification与章节3.4和7.3的内容,以便给出一个明确的答案,为什么它不可能你想做什么.

点赞