make_pair

关于make_pair(1, “Test”)为什么有错:

1 先声明一些东西:
template <typename T1, typename T2>
struct pair
{
T1 first;
T2 second;
// …
};

template <typename T1, typename T2>
pair<T1, T2> make_pair(T1 const&, T2 const&);

2 当调用make_pair(1, “Test”)时

2.1 类型推导
#1 T1 = int;
#2 由于”Test”的类型是char const[5],
而且函数参数T2 const&是引用,
所以T2 = char const[5]
2.2 实例化函数
pair<int, char const[5]> make_pair<>(int const&, char const (const&)[5]);

3 实例化pair<int, char const[5]>类型导致:

struct pair<>
{
int first;
char const second[5];
//…
};
这个类型根本就不可能用来生成对象,因为你
无法初始化常数数组成员。

4 实例化失败导致编译错误:
template <typename T1, typename T2>
pair<T1, T2> make_pair(T1 const& t1, T2 const& t2)
{
return pair<T1, T2>(t1, t2); // 无法构造pair对象,见上面3的描述
^^^^^^^^^^^^^^^^^^^^^
}

1 thought on “make_pair”

Comments are closed.