当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 190890提问 提问时间:2023-10-16 07:27:25阅读次数: 90

最佳答案 问答题库908位专家为你答疑解惑

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中时。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++-标准库 std::pair的三种构造函数":http://eshow365.cn/6-19684-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!