代码之家  ›  专栏  ›  技术社区  ›  dfrib

std模板推导指南::矢量:其他std类型的限定/非限定名称

  •  0
  • dfrib  · 技术社区  · 7 年前

    从…起 cppreference:s deduction guides for std::vector ,提供了以下扣除指南:

    template< class InputIt,
              class Alloc = std::allocator<typename std::iterator_traits<InputIt>::value_type>>
    vector(InputIt, InputIt, Alloc = Alloc())
      -> vector<typename std::iterator_traits<InputIt>::value_type, Alloc>;
    

    discussion of the page ) vector 不包括其名称空间限定符,我从 17.10 (temp.deduct.guide) :

    1.未按名称查找找到扣除指南。

    3.扣减指南应在与相应类别模板相同的范围内声明,对于成员类别模板,应使用 相同的访问权限。

    我想知道是否使用限定名,例如。 std::allocator 在模板参数化中 std::iterator_traits namespace std 矢量

    • 是否有必要使用《扣除指南》中规定的限定名称
    • 如果 ,使用限定名称的首要动机是什么?
    1 回复  |  直到 7 年前
        1
  •  4
  •   T.C. Yksisarvinen    7 年前

    对于演绎指南,没有特殊的名称查找规则,因此,如果非限定查找可以找到名称,则不需要使用限定名称。事实上,在 standard itself 使用非限定名称:

    namespace std {
    
      // [...]
    
      template<class InputIterator,
               class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
        vector(InputIterator, InputIterator, Allocator = Allocator())
          -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
    
      // [...]
    
    }
    


    deduction guides 需要 ( 和a -> . 两者都不允许资格。非限定名称的另一个常见示例是当我们想要引用类(模板)的注入类名时。