我想知道是否需要在库中完全限定名称。
例如(为了便于阅读,我在此处缩进命名空间):
namespace A {
namespace B {
namespace C {
class Foo { ... };
} // namespace C
::A::B::C::Foo foo;
// or
C::Foo foo
} // namespace B
namespace D {
::A::B::C::Foo foo;
// or
B::C::Foo foo
} // namespace D
} // namespace A
我没有完全理解 C++ 标准的 3.4 章,在 STL 向量头中看到了一些我无法解释的内容(为便于阅读而进行了简化):
namespace std {
template<..
class reverse_iterator
{ ... };
template<..
class vector {
typedef _STD reverse_iterator<const_iterator> const_reverse_iterator;
...
}
}
问题是 _STD 扩展为 ::std:: .. 但根据我对名称查找的理解,reverse_iterator 将首先在向量中查找,然后在父命名空间中查找,即 std。怎么可能发生碰撞?
附属问题:在带有参数的模板函数中,名称查找规则是什么?我认为合格的 id 会直接查找已经声明的没有 ADL 的名称,但不合格的名称会执行 ADL,对吗?
预先感谢您的回答。