|
|
Member functions | ||||
pair::pair | ||||
(C++11) | ||||
Non-member functions | ||||
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20) | ||||
(C++11) | ||||
(C++11) | ||||
Helper classes | ||||
(C++11) | ||||
(C++11) | ||||
(C++23) | ||||
(C++23) | ||||
(C++11) | ||||
Deduction guides(C++17) |
pair(); | (1) | (constexpr since C++11) (conditionally explicit since C++11) |
pair(const T1& x,const T2& y); | (2) | (conditionally explicit since C++11) (constexpr since C++14) |
(3) | ||
template<class U1,class U2> pair( U1&& x, U2&& y); | (since C++11) (until C++23) (constexpr since C++14) (conditionally explicit) | |
template<class U1= T1,class U2= T2> constexpr pair( U1&& x, U2&& y); | (since C++23) (conditionally explicit) | |
template<class U1,class U2> constexpr pair( pair<U1, U2>& p); | (4) | (since C++23) (conditionally explicit) |
template<class U1,class U2> pair(const pair<U1, U2>& p); | (5) | (conditionally explicit since C++11) (constexpr since C++14) |
template<class U1,class U2> pair( pair<U1, U2>&& p); | (6) | (constexpr since C++14) (conditionally explicit since C++11) |
template<class U1,class U2> constexpr pair(const pair<U1, U2>&& p); | (7) | (since C++23) (conditionally explicit) |
template< pair-like P> constexpr pair( P&& u); | (8) | (since C++23) (conditionally explicit) |
template<class...Args1,class...Args2> pair(std::piecewise_construct_t, | (9) | (since C++11) (constexpr since C++20) |
pair(const pair& p)=default; | (10) | |
pair( pair&& p)=default; | (11) | (since C++11) |
Constructs a new pair.
first
andsecond
.This constructor participates in overload resolution if and only ifstd::is_default_constructible_v<T1> andstd::is_default_constructible_v<T2> are bothtrue. This constructor isexplicit if and only if either | (since C++11) |
first
withx andsecond
withy.This constructor participates in overload resolution if and only ifstd::is_copy_constructible_v<T1> andstd::is_copy_constructible_v<T2> are bothtrue. This constructor isexplicit if and only ifstd::is_convertible_v<const T1&, T1> isfalse orstd::is_convertible_v<const T2&, T2> isfalse. | (since C++11) |
This constructor is defined as deleted if the initialization of | (since C++23) |
first
withp.first andsecond
withp.second.first
orsecond
would bind a reference to temporary object.first
withp.first andsecond
withp.second.This constructor participates in overload resolution if and only ifstd::is_constructible_v<T1,const U1&> andstd::is_constructible_v<T2,const U2&> are bothtrue. This constructor isexplicit if and only ifstd::is_convertible_v<const U1&, T1> isfalse orstd::is_convertible_v<const U2&, T2> isfalse. | (since C++11) |
This constructor is defined as deleted if the initialization of | (since C++23) |
This constructor is defined as deleted if the initialization of | (since C++23) |
first
withstd::forward<const U1>(p.first) andsecond
withstd::forward<const U2>(p.second).first
orsecond
would bind a reference to temporary object.U1
andU2
respectively. Initializesfirst
withu1 andsecond
withu2.first
orsecond
would bind a reference to temporary object.first
and forwards the elements ofsecond_args to the constructor ofsecond
. This is the only non-default constructor that can be used to create a pair of non-copyable non-movable types. The program is ill-formed iffirst
orsecond
is a reference and bound to a temporary object.Contents |
x | - | value to initialize the first element of this pair |
y | - | value to initialize the second element of this pair |
p | - | pair of values used to initialize both elements of this pair |
u | - | pair-like object of values used to initialize both elements of this pair |
first_args | - | tuple of constructor arguments to initialize the first element of this pair |
second_args | - | tuple of constructor arguments to initialize the second element of this pair |
Does not throw exceptions unless one of the specified operations (e.g. constructor of an element) throws.
#include <complex>#include <iostream>#include <string>#include <tuple>#include <utility> int main(){auto print=[](auto rem,autoconst& pair){std::cout<< rem<<"("<< pair.first<<", "<< pair.second<<")\n";}; std::pair<int,float> p1; print("(1) Value-initialized: ", p1); std::pair<int,double> p2{42,3.1415}; print("(2) Initialized with two values: ", p2); std::pair<char,int> p4{p2}; print("(4) Implicitly converted: ", p4); std::pair<std::complex<double>,std::string> p6{std::piecewise_construct,std::forward_as_tuple(0.123,7.7),std::forward_as_tuple(10,'a')}; print("(8) Piecewise constructed: ", p6);}
Possible output:
(1) Value-initialized: (0, 0)(2) Initialized with two values: (42, 3.1415)(4) Implicitly converted: (*, 3)(8) Piecewise constructed: ((0.123,7.7), aaaaaaaaaa)
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 265 | C++98 | the default constructor copy-initializedfirst and second withT1() andT2() respectively(thus required T1 andT2 to beCopyConstructible) | first andsecond are value-initialized |
LWG 2510 | C++11 | the default constructor was implicit | made conditionally-explicit |
N4387 | C++11 | some constructors were implicit-only, preventing some uses | constructors made conditionally-explicit |
creates apair object of type, determined by the argument types(function template)[edit] | |
constructs a newtuple (public member function of std::tuple<Types...> )[edit] |