std::pair<T1,T2>::pair
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
pair(); |
(C++11未満) | |
constexpr pair(); |
(C++11以上) (条件付き explicit) |
|
| (2) | ||
pair( const T1& x, const T2& y ); |
(C++11未満) | |
pair( const T1& x, const T2& y ); |
(C++11以上) (C++14未満) (条件付き explicit) |
|
constexpr pair( const T1& x, const T2& y ); |
(C++14以上) (条件付き explicit) |
|
| (3) | ||
template< class U1, class U2 > pair( U1&& x, U2&& y ); |
(C++11以上) (C++14未満) (条件付き explicit) |
|
template< class U1, class U2 > constexpr pair( U1&& x, U2&& y ); |
(C++14以上) (条件付き explicit) |
|
| (4) | ||
template< class U1, class U2 > pair( const pair<U1, U2>& p ); |
(C++11未満) | |
template< class U1, class U2 > pair( const pair<U1, U2>& p ); |
(C++11以上) (C++14未満) (条件付き explicit) |
|
template< class U1, class U2 > constexpr pair( const pair<U1, U2>& p ); |
(C++14以上) (条件付き explicit) |
|
| (5) | ||
template< class U1, class U2 > pair( pair<U1, U2>&& p ); |
(C++11以上) (C++14未満) (条件付き explicit) |
|
template< class U1, class U2 > constexpr pair( pair<U1, U2>&& p ); |
(C++14以上) (条件付き explicit) |
|
| (6) | ||
template< class... Args1, class... Args2 > pair( std::piecewise_construct_t, std::tuple<Args1...> first_args, std::tuple<Args2...> second_args ); |
(C++11以上) (C++20未満) |
|
template< class... Args1, class... Args2 > constexpr pair( std::piecewise_construct_t, std::tuple<Args1...> first_args, std::tuple<Args2...> second_args ); |
(C++20以上) | |
pair( const pair& p ) = default; |
(7) | |
pair( pair&& p ) = default; |
(8) | (C++11以上) |
新しいペアを構築します。
1) デフォルトコンストラクタ。 ペアの要素、first および second を両方とも値初期化します。
|
(C++11以上) |
2) first を x で、 second を y で初期化します。
|
(C++11以上) |
3) first を std::forward<U1>(x) で、 second を std::forward<U2>(y) で初期化します。
- このコンストラクタは、
std::is_constructible_v<first_type, U1&&>およびstd::is_constructible_v<second_type, U2&&>がどちらもtrueである場合にのみ、オーバーロード解決に参加します。 - このコンストラクタは、
std::is_convertible_v<U1&&, first_type>がfalseであるか、std::is_convertible_v<U2&&, second_type>がfalseである場合にのみ、explicitになります。
4) first を p.first で、 second を p.second で初期化します。
|
(C++11以上) |
5) first を std::forward<U1>(p.first) で、 second を std::forward<U2>(p.second) で初期化します。
- このコンストラクタは、
std::is_constructible_v<first_type, U1&&>およびstd::is_constructible_v<second_type, U2&&>がどちらもtrueの場合にのみ、オーバーロード解決に参加します。 - このコンストラクタは、
std::is_convertible_v<U1&&, first_type>がfalseであるか、std::is_convertible_v<U2&&, second_type>がfalseである場合にのみ、explicitになります。
6) first_args の要素を first のコンストラクタに転送し、 second_args の要素を second のコンストラクタに転送します。 これはコピー可能でもムーブ可能でもない型のペアを作成するために使用できる、デフォルトコンストラクタ以外の唯一のコンストラクタです。
7) コピーコンストラクタはデフォルト化されており、両方の要素のコピーが constexpr 関数の要件を満たす場合は constexpr になります。
8) ムーブコンストラクタはデフォルト化されており、両方の要素のムーブが constexpr 関数の要件を満たす場合は constexpr になります。
引数
| x | - | このペアの第1要素を初期化するための値 |
| y | - | このペアの第2要素を初期化するための値 |
| p | - | このペアの両方の要素を初期化するために使用される値のペア |
| first_args | - | このペアの第1要素を初期化するためのコンストラクタ引数のタプル |
| second_args | - | このペアの第2要素を初期化するためのコンストラクタ引数のタプル |
例外
指定された操作のいずれか (要素のコンストラクタなど) が例外を投げない限り、例外を投げません。
欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
| DR | 適用先 | 発行時の動作 | 正しい動作 |
|---|---|---|---|
| N4387 | C++11 | some constructors were implicit-only, preventing some uses | constructors made conditionally-explicit |
| LWG 2510 | C++11 | default constructor was implicit | made conditionally-explicit |
例
Run this code
#include <utility>
#include <string>
#include <complex>
#include <tuple>
#include <iostream>
int main()
{
std::pair<int, float> p1;
std::cout << "Value-initialized: "
<< p1.first << ", " << p1.second << '\n';
std::pair<int, double> p2(42, 0.123);
std::cout << "Initialized with two values: "
<< p2.first << ", " << p2.second << '\n';
std::pair<char, int> p4(p2);
std::cout << "Implicitly converted: "
<< p4.first << ", " << p4.second << '\n';
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'));
std::cout << "Piecewise constructed: "
<< p6.first << ", " << p6.second << '\n';
}
出力:
Value-initialized: 0, 0
Initialized with two values: 42, 0.123
Implicitly converted: *, 0
Piecewise constructed: (0.123,7.7), aaaaaaaaaa
関連項目
引数の型によって定義された型の pair オブジェクトを作成します (関数テンプレート) |