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?主要动机是获取工作链接:)