多参数构造函数上的显式关键字?
Posted
技术标签:
【中文标题】多参数构造函数上的显式关键字?【英文标题】:Explicit keyword on multi-arg constructor? 【发布时间】:2010-11-10 06:14:36 【问题描述】:我最近遇到了一些看起来很奇怪的类,它有三个构造函数:
class Class
public:
explicit Class(int );
Class(AnotherClass );
explicit Class(YetAnotherClass, AnotherClass );
// ...
这对我来说真的没有意义 - 我认为显式关键字是为了保护编译器选择的构造不受外来类型的影响。
这是允许的吗?如果是,是什么意思?
【问题讨论】:
这个副本得到了更多/更好的答案:Why is explicit allowed for default constructors and constructors with 2 or more (non-default) parameters? 【参考方案1】:在 C++11 中,多参数构造函数可以隐式转换为大括号初始化。
但是,在 C++11 之前,explicit
仅适用于单参数构造函数。对于多参数构造函数,它被忽略并had no effect。
【讨论】:
感谢您的澄清。我认为 GCC 会在这种情况下发出警告。 需要注意的是,如果除了一个多参数参数之外的所有参数都具有默认值,那么它将产生影响 这在 C++11 中有所改变。现在多参数构造函数可以通过大括号初始化隐式转换为。 除了Shane关于C++11的评论:见***.com/a/4467658以上是关于多参数构造函数上的显式关键字?的主要内容,如果未能解决你的问题,请参考以下文章
operator== 和 boost::detail::atomic_count 中的显式构造函数?