C++ std::vector模板推导指南:其他std类型的限定/非限定名称

C++ std::vector模板推导指南:其他std类型的限定/非限定名称,c++,templates,stdvector,c++17,C++,Templates,Stdvector,C++17,从中,提供了以下扣除指南: template 向量(InputIt,InputIt,Alloc=Alloc()) ->载体; 其中(也如中所述)向量不包括其名称空间限定符,我从以下第1条和第3条中对其进行解释: 1。。。未按名称查找找到扣减指南 3。。。扣减指南应在与相应类别模板相同的范围内声明,对于成员类别模板,应使用 相同的访问权限 我想知道在模板参数化中用于例如std::allocator和在简单模板id中用于std::iterator\u traits的限定名是否严格必要。从上面引用的

从中,提供了以下扣除指南:

template
向量(InputIt,InputIt,Alloc=Alloc())
->载体;
其中(也如中所述)
向量
不包括其名称空间限定符,我从以下第1条和第3条中对其进行解释:

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

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

我想知道在模板参数化中用于例如
std::allocator
和在简单模板id中用于
std::iterator\u traits
的限定名是否严格必要。从上面引用的第3部分来看,演绎指南难道不能在
名称空间std
中声明,就像
向量
一样吗

问题

  • 当通过非限定查找(与演绎指南的范围相同)可以使用上述
    std::vector
    的演绎指南中的限定名称时,是否有必要使用限定名称
  • 如果“否”,使用限定名称的首要动机是什么

扣减指南没有特殊的名称查找规则,因此,如果非限定查找可以找到名称,则不需要使用限定名称。事实上,《扣减指南》中使用了非限定名称:

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>;

  // [...]

}
名称空间std{
// [...]
模板
向量(InputIterator,InputIterator,分配器=分配器())
->载体;
// [...]
}
cppreference的实践是在允许的情况下使用限定名称,但这是一种风格选择,可以提高表达的清晰度,减少歧义,并很好地使用我们的链接基础设施



请注意,的语法要求在
之前有一个模板名称,在
->
之后有一个简单的模板id。这两种方法都不允许限定。非限定名称的另一个常见示例是,当我们要引用类(模板)的注入类名时.

扣减指南没有特殊的名称查找规则,因此,如果非限定查找可以找到名称,则不需要使用限定名称。事实上,中的扣减指南使用非限定名称:

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>;

  // [...]

}
名称空间std{
// [...]
模板
向量(InputIterator,InputIterator,分配器=分配器())
->载体;
// [...]
}
cppreference的实践是在允许的情况下使用限定名称,但这是一种风格选择,可以提高表达的清晰度,减少歧义,并很好地使用我们的链接基础设施



请注意,的语法要求在
之前有一个模板名称,在
->
之后有一个简单的模板id。这两种方法都不允许限定。非限定名称的另一个常见示例是,当我们要引用类(模板)的注入类名时.

对于CPPFerence?主要动机是获取工作链接:)对于CPPFerence?主要动机是获取工作链接:)