C++-标准库 std::pair的三种构造函数

std::pair有三种构造函数形式

pair(const T1& x,const T2& y);
pair(U&& x, V&& y);
template <typename... Args1, typename... Args2>
pair(piecewise_construct_t, 
	 tuple<Args1...> first_args,
	 tuple<Args2...> second_args);

前两个构造函数是我们常见的形式,传递一个实参给first,另一个实参给second,并支持move语义和隐式类型转换的支持。
第三个构造函数的含义是,将first_args tuple中的元素作为参数传递给first类型的构造函数,first_args tuple中的元素作为参数传递给second类型的构造函数,piecewise_construct_t是一个struct类型。
举例:

tuple<int, float> t(1,2.22);
pair<int,Foo> p(std::piecewise_construct, std::make_tuple<42>, t);

std::piecewise_construct是std内部声明的一个变量,t中的1和2.22将作为Foo类的构造函数参数传入。由于pair的第三种构造函数必须有两个tuple,所以42也需要使用tuple包起来。
这种初始化形式的必要性发生在当我们需要emplace一个新的元素到map或multimap中时。

你可能感兴趣的:(C++,c++,标准库,pair,std)