模板类 pair 的一个成员模板函数
template <class U1,class U2>
pair(const pair<U1,U2>&x):first(x.first),second(x.second)
如果两个变量都不是常量类型,可以使用make_pair(x,y),来产生一个pair的对象。
对照上面的构造函数来看,其中的x是赋值给x.first,y是赋值给x.second。
x.first是U1类型,x.second是U2类型。x.first和x.second是pair的两个成员对象。
pair模板类的构造函数:
template<class T1,classT2>struct pair
{
typedef T1 first_type;
typedef T2 second_type;
pair():first(T1()),second(T2()){}
pair(const T1&V1,const T2&V2):first(V1),sencond(V2){}
template<class U1,class U2>pair(const pair<U1,U2>):first(x.first),second(x.second){}
T1 first;
T2 second;
};
第一个(默认)构造函数将first初始化为T(),second初始化为U()。
第二个构造函数将first初始化为x,second初始化为y。第三个(模板)
构造函数将first初始化为pr.first,second初始化为pr.second。T和U只需各自提供一个默认构造函数,一个接受单参数的构造函数,以及一个析构函数
make_pair的作用与问题:可以在必要时产生一个pair对象。但不是每次都成功,因为模板函数在检测模板参数时将忽略点所有的const属性(至少他们可以这样做,某些编译器就是这样处理的。)也就是说我们不能依赖make_pair产生一个含有一个和多个常量成员的对象的pair对象。而这些map和multimap有时需要的。