std:: make_pair
|
Определено в заголовочном файле
<utility>
|
||
|
template
<
class
T1,
class
T2
>
std:: pair < T1, T2 > make_pair ( T1 x, T2 y ) ; |
(до C++11) | |
|
template
<
class
T1,
class
T2
>
std:: pair < /*V1*/ , /*V2*/ > make_pair ( T1 && x, T2 && y ) ; |
(начиная с C++11)
(constexpr начиная с C++14) (до C++20) |
|
|
template
<
class
T1,
class
T2
>
constexpr
std::
pair
<
std::
unwrap_ref_decay_t
<
T1
>
,
|
(начиная с C++20) | |
Создает объект std::pair , выводя целевой тип из типов аргументов.
|
Для типов
std::
decay
<
T1
>
::
type
как
|
(начиная с C++11)
(до C++20) |
Содержание |
Параметры
| x, y | - | значения для создания пары |
Возвращаемое значение
|
std:: pair < T1, T2 > ( x, y ) |
(до C++11) |
|
std:: pair < /*V1*/ , /*V2*/ > ( std:: forward < T1 > ( x ) , std:: forward < T2 > ( y ) ) |
(начиная с C++11)
(до C++20) |
|
std::
pair
<
std::
unwrap_ref_decay_t
<
T1
>
,
std::
unwrap_ref_decay_t
<
T2
>>
|
(начиная с C++20) |
Пример
#include <functional> #include <iostream> #include <utility> int main() { int n = 1; int a[5] = {1, 2, 3, 4, 5}; // создание пары из двух целых чисел auto p1 = std::make_pair(n, a[1]); std::cout << "Значение p1: " << '(' << p1.first << ", " << p1.second << ")\n"; // создание пары из ссылки на int и массива (преобразованного в указатель) auto p2 = std::make_pair(std::ref(n), a); n = 7; std::cout << "Значение p2: " << '(' << p2.first << ", " << *(p2.second + 2) << ")\n"; }
Вывод:
The value of p1 is (1, 2) The value of p2 is (7, 3)
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 181 | C++98 |
типы параметров были константными ссылками,
что делало невозможной передачу массивов |
изменены эти
типы на типы значений |