# std::make_pair

< cpp‎ | utility‎ | pair

定义于头文件 `<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 到某类型 `X` 产生 std::reference_wrapper<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};

        // 从二个 int 建造 pair
        auto p1 = std::make_pair(n, a[1]);
        std::cout << "The value of p1 is "
                  << "(" << p1.first << ", " << p1.second << ")\n";

        // 从到 int 的引用和数组（退化成指针）建造 pair
        auto p2 = std::make_pair(std::ref(n), a);
        n = 7;
        std::cout << "The value of p2 is "
                  << "(" << p2.first << ", " << *(p2.second + 2) << ")\n";
    }

输出：

    The value of p1 is (1, 2)
    The value of p2 is (7, 3)

### 参阅

unwrap_reference unwrap_ref_decay (C++20)(C++20) | 获取包装于 std::reference_wrapper 的引用类型 (类模板)