我正在查看C ++ STL矢量模板代码,以准确理解它是如何实现的。 我对模板编程有非常基本的了解,你能否清楚地解释一下表达式
typename _Alloc = std::allocator<_Tp>
从STL向量摘录如下:
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
感谢您的帮助
答案 0 :(得分:2)
这会为模板参数指定一个默认类型,这样您就不必在创建向量时添加它:
std::vector<int> v;
默认情况下,模板的第二个参数由std::allocator<_Tp>
类型填充。
默认模板参数允许通过包含一些默认功能来缩短数据声明(您可以通过简单地为模板声明提供第二个参数来覆盖它)。
答案 1 :(得分:1)
类模板参数可以具有默认参数,就像函数允许您具有函数参数的默认参数一样。
这允许您只使用单个模板参数(值类型)std::vector
,而不必显式指定分配器,因为大多数情况下您都需要默认分配器。
此
std::vector<int>
与
完全相同std::vector<int, std::allocator<int> >