【问题标题】:Explicit keyword on multi-arg constructor?多参数构造函数上的显式关键字?
【发布时间】:2010-11-10 06:14:36
【问题描述】:

我最近遇到了一些看起来很奇怪的类,它有三个构造函数:

class Class
{
    public:
        explicit Class(int );

        Class(AnotherClass );

        explicit Class(YetAnotherClass, AnotherClass );

    // ...
}

这对我来说真的没有意义 - 我认为显式关键字是为了保护编译器选择的构造不受外来类型的影响。

这是允许的吗?如果是,是什么意思?

【问题讨论】:

标签: c++ constructor explicit explicit-constructor


【解决方案1】:

在 C++11 中,多参数构造函数可以隐式转换为大括号初始化。

但是,在 C++11 之前,explicit 仅适用于单参数构造函数。对于多参数构造函数,它被忽略并had no effect

【讨论】:

  • 感谢您的澄清。我认为 GCC 会在这种情况下发出警告。
  • 需要注意的是,如果除了一个多参数参数之外的所有参数都具有默认值,那么它将产生影响
  • 这在 C++11 中有所改变。现在多参数构造函数可以通过大括号初始化隐式转换为。
  • 除了Shane关于C++11的评论:见stackoverflow.com/a/4467658
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2013-07-12
  • 2016-12-31
  • 2017-12-31
  • 2018-04-26
  • 1970-01-01
相关资源
最近更新 更多