地图的类模板是这样的
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
从模板看来,它需要4个模板参数,但是在声明地图时,我仅看到两个模板参数。
map <int, int> table;
这不是问题吗?如果不是正确的话,那么仅定义最后两个(四个)中的类型是正确的吗?
map<,,int,int>
- 这不是问题吗?
这不是问题,它是默认的模板参数。
默认模板参数在=符号后的参数列表中指定。
这意味着当您不指定它们时,例如map<key_type, value_type>
,将使用默认参数。即Compare
会less<key_type>
,并Alloc
会allocator<pair<const key_type, value_type>>
。
- 仅定义最后四个(四个)的类型是否正确?映射<,, int,int>
否。使用默认参数代替缺少的尾随参数。您不能仅指定最后两个参数,而不能指定前两个参数并希望应用默认参数。在这种情况下,前两个参数根本没有默认参数。
顺便提一句
如果为主类模板的模板参数指定了默认值,则每个后续模板参数都必须具有默认参数,但最后一个参数可能是模板参数包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句