// 头文件<utility>pair();(until C++11)(1)constexprpair();(since C++11)(1)(conditionally explicit)pair(const T1& x,const T2& y );(until C++11)(2)pair(const T1& x,const T2& y );(since C++11)(until C++14)(conditionally explicit)(2)constexprpair(const T1& x,const T2& y );(since C++14)(conditionally explicit)(2)template<classU1,classU2>pair( U1&& x, U2&& y );(since C++11)(until C++14)(conditionally explicit)(3)template<classU1,classU2>constexprpair( U1&& x, U2&& y );(since C++14)(until C++23)(conditionally explicit)(3)template<classU1= T1,classU2= T2 >constexprpair( U1&& x, U2&& y );(since C++23)(conditionally explicit)(3)template<classU1,classU2>pair(const pair<U1, U2>& p );(until C++11)(4)template<classU1,classU2>pair(const pair<U1, U2>& p );(since C++11)(conditionally explicit)(4)template<classU1,classU2>pair( pair<U1, U2>&& p );(since C++11)(until C++14)(conditionally explicit)(5)template<classU1,classU2>constexprpair( pair<U1, U2>&& p );(since C++14)(conditionally explicit)(5)template<class... Args1,class... Args2 >pair( std::piecewise_construct_t,
std::tuple<Args1...> first_args,
std::tuple<Args2...> second_args );(since C++11)(until C++20)(6)// 注意template<class... Args1,class... Args2 >constexprpair( std::piecewise_construct_t,
std::tuple<Args1...> first_args,
std::tuple<Args2...> second_args );(since C++20)(6)// 注意pair(const pair& p )=default;(7)pair( pair&& p )=default;(since C++11)(8)
举例
#include<iostream>#include<utility>// pair#include<tuple>structFoo{Foo(std::tuple<int,float>){
std::cout <<"Constructed a Foo from a tuple\n";}Foo(int,float){
std::cout <<"Constructed a Foo from an int and a float\n";}};intmain(){
std::tuple<int,float>t(1,3.14);
std::pair<Foo, Foo>p1(t, t);
std::pair<Foo, Foo>p2(std::piecewise_construct, t, t);return0;}
结果
lee@leedeMacBook-Pro piecewise_construct %./main
Constructed a Foo from a tuple
Constructed a Foo from a tuple
Constructed a Foo from an intand a float
Constructed a Foo from an intand a float