所以我正在查看描述std::pair
代码的讲义。以下是代码:
template <class U, class V>
struct pair {
U first;
V second;
pair(const U& first = U(), const V& second = V()) :
first(first), second(second) {}
};
template <class U, class Y>
pair<U, V> make_pair(const U& first, const V& second);
我试图理解这段代码,但我遇到了问题,特别是在结构中的行对。据我所知,我们根据相应的类存储两个创建两个变量的第一个和第二个变量。
在配对函数的参数中,我看到我们创建了一个新类U
和V
,并将它们分别分配给first
和second
,但我不知道由于符号符号,我们清楚地了解const U&
的工作原理。更令人困惑的是在函数声明之后使用冒号,这是我以前从未在c ++中使用过的。
我也不明白下面的行声明first(first)
和second(second)
,特别是括号。 first
不是first
类型,那么我们如何才能从{{1}}调用函数?
答案 0 :(得分:2)
我们将把它分成几部分来解决这个问题。
U&
表示我们传递的是一个将由引用使用的U
类型的变量 - 构造函数使用的变量与给定的相同(相同的内存地址和值)一个论点。通过说const U& first = U()
我们说我们保证不会更改传递给构造函数first
的{{1}},我们希望const ...
通过引用({{1}如果我们不在构造函数中提供first
,我们应该使用...U&...
的默认构造函数(first
)提供的U
。有关参考文献的更多信息,this page应该有所帮助。
U
是“构造函数初始化列表”的一部分 - 这是在构造函数中初始化类成员变量的首选方法。我们告诉构造函数我们正在使用构造函数提供的参数... = U()
初始化名为first(first)
(pair
}的first
成员变量(first(...)
我们前面讨论过)。有关构造函数初始化列表的更多信息,this page应该有帮助。