C++中访问“父级”命名空间问题:A::B::C为何可访问A::X成员?
为什么A::B::C命名空间下的函数能访问X::myVariable?
第一个cpp文件代码:
using namespace A::B::C; namespace A::B::C{ void function(){ if (X::myVariable){ //... } }
第二个cpp文件代码:
namespace A::X{ bool myVariable = 2; }
这是C++命名空间查找规则导致的结果:
当在A::B::C命名空间内部使用X::myVariable时,编译器会按从内到外的顺序查找命名空间:
- 先在当前的
A::B::C命名空间里找X,找不到; - 接着去外层的
A::B命名空间查找,依然找不到; - 再往上到最外层的
A命名空间,发现这里存在X子命名空间,也就是A::X; - 最终
X::myVariable会被解析为A::X::myVariable,因此能正常访问到定义在A::X里的变量。
说白了,你写的X其实是A::X的简写——因为当前函数所在的A::B::C嵌套在A命名空间下,编译器会自动在外层的A中匹配到X这个命名空间。
内容的提问来源于stack exchange,提问作者user1008636
相关产品推荐
相关产品推荐

