multi-arg构造函数的显式关键字?

Lir*_*una 34 c++ explicit

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

class Class
{
    public:
        explicit Class(int );

        Class(AnotherClass );

        explicit Class(YetAnotherClass, AnotherClass );

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Rog*_*mbe 52

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

但是,在C++ 11之前explicit只应用于单参数构造函数.对于多参数构造函数,它被忽略并且没有效果.

  • 需要注意的是,如果除多个arg参数之外的所有参数都具有默认值,那么它将产生影响 (26认同)
  • 这已经改变了C++ 11.现在可以使用大括号初始化隐式转换多参数构造函数. (20认同)
  • 除了Shane关于C++ 11的评论之外:请参阅http://stackoverflow.com/a/4467658 (2认同)