为什么双参数构造函数以显式关键字开头?

时间:2013-07-15 06:49:34

标签: c++ explicit

我的好友和我最近一直在阅读leveldb源代码。我们遇到了这个问题。在leveldb db/skiplist.h文件中,有一个构造函数声明:

explicit SkipList(Comparator cmp, Arena* arena);

我知道使用单个参数的显式构造函数意味着构造函数参数没有隐式类型转换。但是具有显式关键字的双参数构造函数意味着什么? 这是C ++ 11的新规则吗?

感谢。

1 个答案:

答案 0 :(得分:16)

使用C ++ 11,您可以使用 braced-init-lists 代替其他一些表达式,这会产生影响。例如,您可以在return语句中使用它们:

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