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’的引用不明确