34

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

class Class
{
    public:
        explicit Class(int );

        Class(AnotherClass );

        explicit Class(YetAnotherClass, AnotherClass );

    // ...
}

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

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

4

1 回答 1

54

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

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

于 2009-07-13T10:24:37.123 回答