2015-12-09 100 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引用。我相信你的困惑與使用相同名稱的事實有關。

相關問題