多参数构造函数上的显式关键字的用途是什么?

问题描述 投票:0回答:1

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

class Class
{
    public:
        explicit Class(int );

        Class(AnotherClass );

        explicit Class(YetAnotherClass, AnotherClass );

    // ...
}

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

这是允许的吗?如果是的话,这意味着什么?

c++ constructor explicit explicit-constructor
1个回答
54
投票

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

但是,在 C++11 之前

explicit
仅适用于单参数构造函数。对于多参数构造函数,它被忽略并且没有任何效果

© www.soinside.com 2019 - 2024. All rights reserved.