C++ C++;对代码理解

C++ C++;对代码理解,c++,c++-standard-library,C++,C++ Standard Library,因此,我正在浏览这篇讲义,它描述了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>

因此,我正在浏览这篇讲义,它描述了
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秒;
成对(常数U&first=U(),常数V&second=V()):
第一(第一),第二(第二){}
};
模板
配对(常数U和第一、常数V和第二);
我试图理解这段代码,但我遇到了问题,特别是在结构中的行对。我知道我们存储了两个变量,并根据各自的类创建了第一个和第二个变量

在pair函数的参数中,我看到我们创建了一个新的类
U
V
,并将它们分别分配给
第一个
第二个
,但我不清楚
常量U和
是如何工作的,因为有符号和符号。更令人困惑的是,在C++中使用了我以前从未见过的函数声明之后使用冒号。

我也不理解下面的那行,它声明了
first(first)
second(second)
,特别是括号。
first
不是一种类型,那么我们如何能够从
first
调用函数呢?

我们将通过将函数分成几个部分来解决这个问题

U&
表示我们正在传递一个类型为
U
的变量,该变量将被引用-构造函数使用的变量与作为参数给出的变量相同(相同的内存地址和值)。通过说
const U&first=U()
我们是说我们承诺不更改传递给构造函数的
first
const…
),我们希望
first
被引用(
…U&…
),如果我们没有在构造函数中首先提供
,我们应该使用
U
的默认构造函数(
..=U()
)提供的
U
)。有关参考资料的更多信息,请参阅


first(first)
是“构造函数初始化列表”的一部分,是初始化构造函数中类成员变量的首选方法。我们告诉构造函数,我们正在使用构造函数提供的参数
first
初始化名为
first
first(…)
)的
pair
的成员变量(前面讨论的
U&
)。有关构造函数初始化列表的详细信息,请参见。

和。构造函数
对(const U&first=U(),const V&second=V())
可能看起来有点可疑,但请记住,可以将临时对象绑定到
const
引用。实际上,如果不指定参数,则使用默认值(0表示普通旧类型)初始化成员
first
second
pair
使用pass-by-const引用来避免复制大型对象。不,
first
不是类型,它是类型
U
的成员。为了便于将来参考,当问多个问题时,请在自己的帖子中询问每个问题。相关:这两个概念都非常重要!确保你彻底地学习它们;你的代码会更好。