gpt4 book ai didi

c++ - 库中命名空间的使用

转载 作者:行者123 更新时间:2023-11-30 01:57:52 25 4
gpt4 key购买 nike

我想知道是否需要库中的完全限定名称。

例如(为了便于阅读,我在这里缩进命名空间):

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 vector header(为便于阅读而简化)中看到了一些我无法解释的东西:

namespace std {
template<..
class reverse_iterator
{ ... };

template<..
class vector {
typedef _STD reverse_iterator<const_iterator> const_reverse_iterator;
...
}
}

问题是 _STD 被扩展为::std::.. 但根据我对名称查找的理解,reverse_iterator 将首先在 vector 中查找,然后在 std 的父命名空间中查找。怎么可能发生碰撞?

附属问题:带参数的模板函数中名称的名称查找规则是什么?我认为合格的 id 会直接查找已经在没有 ADL 的情况下声明的名称,但不合格的名称会执行 ADL,对吗?

预先感谢您的回答。

最佳答案

你是对的,那里似乎不需要资格。

不要试图从标准库代码中学习 C++,它必须以一种非常特殊的风格编写,原因有很多可能不适用于你,包括向后兼容性、可移植性、替代配置(例如禁用所有命名空间对于历史编译器)。在某些配置中 _STD 可能会扩展为不同的东西,或者它可能只是多余的(但无害。)

what would be the name lookup rules for names in a template functions with arguments ? I think that a qualified-id would look directly for names already declared without ADL but an unqualified name would do an ADL, am I right ?

是的,ADL 仅适用于非限定名称。

关于c++ - 库中命名空间的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com