34

私は最近、3 つのコンストラクタを持つ奇妙なクラスに出くわしました。

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 に答える