Пространства имён
Варианты
Действия

std::make_pair

Материал из cppreference.com
< cpp‎ | utility‎ | pair
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::pair
Функции-элементы
(C++11)
Функции, не являющиеся элементами
make_pair
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
(C++11)
(C++11)
Правила вывода(C++17)
Вспомогательные классы
(C++11)
 
Определено в заголовочном файле <utility>
template< class T1, class T2 >
std::pair<T1, T2> make_pair( T1 t, T2 u );
(до C++11)
template< class T1, class T2 >
std::pair<V1, V2> make_pair( T1&& t, T2&& u );
(начиная с C++11)
(до C++14)
template< class T1, class T2 >
constexpr std::pair<V1, V2> make_pair( T1&& t, T2&& u );
(начиная с C++14)

Создаёт объект std::pair, выводя целевой тип из типов аргументов.

Выведенные типы V1 и V2 это std::decay<T1>::type и std::decay<T2>::type (обычные преобразования типов, применяемые к аргументам функций, передаваемых по значению), если только применение std::decay не приводит к std::reference_wrapper<X> для некоторого типа X, и в этом случае выводимым типом является X&.

(начиная с C++11)

Содержание

[править] Параметры

t, u значения, из которых создаётся pair

[править] Возвращаемое значение

Объект std::pair, содержащий заданные значения.

[править] Пример

#include <iostream>
#include <utility>
#include <functional>
 
int main()
{
    int n = 1;
    int a[5] = {1, 2, 3, 4, 5};
 
    // создаёт pair из двух целых
    auto p1 = std::make_pair(n, a[1]);
    std::cout << "Значение p1 равно "
              << "(" << p1.first << ", " << p1.second << ")\n";
 
    // создаёт pair из ссылки на int и массива (раскладывающийся до указателя)
    auto p2 = std::make_pair(std::ref(n), a);
    n = 7;
    std::cout << "Значение p2 равно "
              << "(" << p2.first << ", " << *(p2.second + 2) << ")\n";
}

Вывод:

Значение p1 равно (1, 2)
Значение p2 равно (7, 3)

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 181 C++98 типы параметров были константно-ссылочными типами,
что делало невозможным передачу массивов
изменили эти типы на типы значений