我的好友和我最近一直在閱讀leveldb源代碼。我們遇到這個問題。在性LevelDB db/skiplist.h文件中,有一個構造函數聲明:爲什麼雙參數構造函數以明確的關鍵字開頭?
explicit SkipList(Comparator cmp, Arena* arena);
我知道有一個參數顯式構造單元,構造函數的參數沒有隱式類型轉換。但是具有顯式關鍵字的雙參數構造函數是什麼意思? 是C++ 11的新規嗎?
謝謝。
我的好友和我最近一直在閱讀leveldb源代碼。我們遇到這個問題。在性LevelDB db/skiplist.h文件中,有一個構造函數聲明:爲什麼雙參數構造函數以明確的關鍵字開頭?
explicit SkipList(Comparator cmp, Arena* arena);
我知道有一個參數顯式構造單元,構造函數的參數沒有隱式類型轉換。但是具有顯式關鍵字的雙參數構造函數是什麼意思? 是C++ 11的新規嗎?
謝謝。
使用C++ 11,您可以使用括號初始化列表來代替其他表達式,這就有所不同。例如,您可以使用它們作爲回報語句:
SkipList foo() {
return {{}, nullptr}; //does not compile with explicit constructor
return SkipList{{}, nullptr}; //compiles with or without explicit constructor
}
這是準確的聲明嗎? '競技場'沒有默認值? – Gorpik
@Gorpik我不知道OP是否有完全相同的界面,但看[這裏](http://code.google.com/p/leveldb/source/browse/db/skiplist.h?r=bc1ee4d25e09b04e074db330a41f54ef4af0e31b)。 – TobiMcNamobi
C++「explicit」關鍵字用於避免隱式轉換 – alexbuisson