当外部命名空间具有相同名称的成员时,访问未命名的命名空间的成员

Pra*_*rav 1 c++ namespaces

这是测试代码

extern "C" {int printf(const char *, ...);}
namespace PS
{
   int x = 10; // A
   // some more code

   namespace {    
      int x = 20; // B
   }
   // more code
}

int main()
{
   printf("%d", PS::x); // prints 10
}
Run Code Online (Sandbox Code Playgroud)

有没有什么办法来访问内部(未命名)命名空间的x内部main

我不想改变里面的代码PS.如果代码看起来非常不切实际,请道歉.

PS:我倾向于x经常使用这个名字.

Mik*_*our 5

否.指定命名空间的唯一方法是按名称,内部命名空间没有名称.

假设您无法重命名任何一个变量,您可以重新打开内部命名空间并添加一个不同名称的访问者函数或引用:

namespace PS {
    namespace {
        int & inner_x = x;
    }
}

printf("%d", PS::inner_x);
Run Code Online (Sandbox Code Playgroud)

  • @Xeo:它们在翻译单元中是独一无二的. (2认同)