我对以下构造函数感到有点困惑。我知道值键,值和下一个在这里被初始化,但是它们之后的括号让我失望。操作键(键)是否将类型K对象传递给类型K构造函数?这里发生了什么?我正在查看的网页是here。非常感谢任何帮助。
// Hash node class template
template <typename K, typename V>
class HashNode
{
public:
HashNode(const K &key, const V &value)
: key(key), value(value)
{}
private:
// key-value pair
K key;
V value;
};
答案 0 :(得分:7)
:key(key)只是初始化私有成员&#39; key&#39;使用参数&#39; key&#39;的值。即使具有相同的名称,它也不含糊,因为只能使用此语法初始化成员,而C ++用于解析符号名称的规则意味着首先检查本地定义的(包括通过参数列表)名称,因此第二个关键&#39;必须参考论点。 这是否是一种好的做法也许是一种品味问题。
答案 1 :(得分:2)
在C ++中,在调用构造函数的主体之前初始化所有成员(如果省略了成员,则使用适当的默认构造函数初始化它)。一般语法是
foo(bar)
,其中foo
是要初始化的成员的名称,bar>
是您要将其初始化的值。
在此特定情况下,您有key(key)
。 key
的第一个实例是成员的名称,第二个实例是它初始化的值。这里的值是指您通过相同名称传入的const引用。我相信你的困惑与使用相同名称的事实有关。
答案 2 :(得分:2)
您要询问的构造函数部分在此处记录:http://en.cppreference.com/w/cpp/language/initializer_list
它被称为成员初始化列表。