名称查找失败 - C++ 命名空间

时间:2021-01-26 17:02:26

标签: c++ namespaces

您能解释一下为什么在该代码中名称空间查找失败吗?

namespace B {
namespace C {
   int i;
}
}
namespace A {
namespace B {

void foo() {
    // why does not much A::B::C
    B::C::i = 3;   
}
}
}

是的,我知道 ::B::C::i 可以工作,因为我们指示全局命名空间,但我很好奇为什么当我们不在 B 之前使用 :: 时,查找不会在 B::C 命名空间之外搜索。

提前致谢

1 个答案:

答案 0 :(得分:2)

在命名空间 ::A::B 内,对 B 的非限定查找会找到命名空间 ::A::B 而不是找到命名空间 ::B。并且没有名称 ::A::B::C,因此在找到的 C 中对 ::A::B 的限定查找失败。