我和我的伙伴最近在阅读leveldb源代码时遇到了这个问题。在leveldb的db/skiplist.h文件中,有一个构造函数声明:
explicit SkipList(Comparator cmp, Arena* arena);
我知道带一个参数的显式构造函数意味着构造函数参数没有隐式类型转换。但是带有 explicit 关键字的双参数构造函数是什么意思?这是 C++11 的新规则吗?
谢谢。
我和我的伙伴最近在阅读leveldb源代码时遇到了这个问题。在leveldb的db/skiplist.h文件中,有一个构造函数声明:
explicit SkipList(Comparator cmp, Arena* arena);
我知道带一个参数的显式构造函数意味着构造函数参数没有隐式类型转换。但是带有 explicit 关键字的双参数构造函数是什么意思?这是 C++11 的新规则吗?
谢谢。
使用C++11,你可以在某些其他表达式的位置上使用大括号初始化列表,这会有所不同。例如,你可以在返回语句中使用它们:
SkipList foo() {
return {{}, nullptr}; //does not compile with explicit constructor
return SkipList{{}, nullptr}; //compiles with or without explicit constructor
}
TypeName()
的简写,并消除最令人烦恼的解析。这实际上是C++11的一个非常重要的特性。您应该查找一些相关信息。 - chris
arena
没有默认值吗? - Gorpik