2015-12-09 58 views
0

我被下面的构造函数弄糊涂了。我明白,值,键和值将在这里被初始化,但随后的括号会将我抛弃。操作键(键)是否将类型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

@NickyC这是关于类内成员初始值设定项,而不是成员初始值设定项列表。 – emlai

+0

其他阅读:[为什么我应该更喜欢使用成员初始化列表?](http://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list) – user4581301

+0

好吧感谢大家。现在我有了正确的名词,“成员初始值设定项”对Google来说非常好,我想不起如何搜索这个答案 – Rhurac

回答

7

:key(key)只是意味着使用参数'key'中的值初始化私有成员'key'。即使具有相同的名称也没有歧义,因为只有成员可以使用此语法进行初始化,而C++用于解析符号名称的规则意味着首先检查本地定义的名称(包括通过参数列表)名称,因此第二个“键”必须参考论证。 这是否是好的做法可能是一个品味问题。

2

在C++中,所有成员都在构造函数的主体被调用之前被初始化(如果一个成员被遗漏了,它将被用适当的默认构造函数初始化)。一般语法是 foo(bar),其中foo是要初始化的成员的名称,bar>是您初始化它的值。

在这个特定的情况下,您有key(key)key的第一个实例是成员的名称,第二个实例是它正在使用的初始值。这里的值是指你通过同名传入的const引用。我相信你的困惑与使用相同名称的事实有关。

相关问题