2013-07-15 67 views
16

我的好友和我最近一直在閱讀leveldb源代碼。我們遇到這個問題。在性LevelDB db/skiplist.h文件中,有一個構造函數聲明:爲什麼雙參數構造函數以明確的關鍵字開頭?

explicit SkipList(Comparator cmp, Arena* arena); 

我知道有一個參數顯式構造單元,構造函數的參數沒有隱式類型轉換。但是具有顯式關鍵字的雙參數構造函數是什麼意思? 是C++ 11的新規嗎?

謝謝。

+0

這是準確的聲明嗎? '競技場'沒有默認值? – Gorpik

+2

@Gorpik我不知道OP是否有完全相同的界面,但看[這裏](http://code.google.com/p/leveldb/source/browse/db/skiplist.h?r=bc1ee4d25e09b04e074db330a41f54ef4af0e31b)。 – TobiMcNamobi

+0

C++「explicit」關鍵字用於避免隱式轉換 – alexbuisson

回答

16

使用C++ 11,您可以使用括號初始化列表來代替其他表達式,這就有所不同。例如,您可以使用它們作爲回報語句:

SkipList foo() { 
    return {{}, nullptr}; //does not compile with explicit constructor 
    return SkipList{{}, nullptr}; //compiles with or without explicit constructor 
} 
+0

通過統一初始化您的意思是初始化多個參數,如初始化數組? – lulyon

+0

謝謝,這是非常有幫助的。 – lulyon

+1

@lulyon,統一初始化通常由使用大括號產生。您可以使用它們來調用構造函數,作爲'TypeName()'的簡寫,並消除最令人頭痛的解析。這實際上是C++ 11的一個重要特性。你應該查看一些關於它的信息。 – chris

相關問題