【发布时间】:2020-12-10 15:40:04
【问题描述】:
如何在 C++ 命名空间中解析名称?
我对以多种不同方式提供名称的情况特别感兴趣,例如通过父命名空间和using namespace。
获取这段代码:
namespace ns1 {
static auto str = "ns1::str";
}
namespace ns2 {
static auto str = "ns2::str";
namespace sub {
using namespace ns1;
auto f() { return str; }
}
}
使用我的编译器,ns2::sub::f() 返回"ns2::str"。我预计它会返回"ns1::str",因为using namespace ns1 出现在ns2::sub 中。
现在这件作品:
static auto str = "str";
namespace ns1 {
static auto str = "ns1::str";
}
namespace ns2 {
using namespace ns1;
auto f() { return str; }
}
我希望它的行为与前一个案例一样。相反,它不会编译:
错误:对“str”的引用不明确
这背后的逻辑是什么?
【问题讨论】:
标签: c++ namespaces language-lawyer