c++ - 当外部命名空间具有同名成员时访问未命名命名空间的成员

标签 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
}

有什么方法可以在 main 中访问内部(未命名)命名空间的 x 吗?

我不想更改 PS 中的代码。如果代码看起来非常不切实际,我们深表歉意。

P.S:我倾向于经常使用名称 x

最佳答案

没有。指定命名空间的唯一方法是通过名称,内部命名空间没有名称。

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

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

printf("%d", PS::inner_x);

关于c++ - 当外部命名空间具有同名成员时访问未命名命名空间的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412537/

相关文章:

c++ - 将 boost::optional 与常量类型一起使用 - C++

c++ - 表达式必须具有指向类类型的指针

c++ - 从未调用过 WSASend 完成例程

c++ - 在 C++ 中用随机数填充二维数组

python - 如何访问 __main__ 范围内的全局变量?

php - 使用 namespace 重定位和重命名类

xml - 使用 Powershell 从命名空间中选择 XML 节点

c# - OpenSSL 错误 "data greater than mod len"

python - 如何从另一个python文件执行 `if __name__ == "__main_ _"`中的代码

xml - 使用 JAX-B 解码后如何检索定义的命名空间声明