有人可以解释这种语法吗?

时间:2015-12-09 01:25:36

标签: c++

我对以下构造函数感到有点困惑。我知道值键,值和下一个在这里被初始化,但是它们之后的括号让我失望。操作键(键)是否将类型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;
};

3 个答案:

答案 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

它被称为成员初始化列表。