2009-07-13 23 views
28

私は最近3つのコンストラクタを持っていたいくつかの奇妙な格好クラスに出くわした:multi-argコンストラクタの明示的なキーワード?

class Class 
{ 
    public: 
     explicit Class(int); 

     Class(AnotherClass); 

     explicit Class(YetAnotherClass, AnotherClass); 

    // ... 
} 

これは本当に私には意味がありません - 私は、明示的なキーワードが外国タイプからコンパイラ選ばれたの建設を保護することであると思いました。

これは許可されていますか?それなら、それはどういう意味ですか?

+0

[重複した(デフォルト以外の)パラメータを持つデフォルトのコンストラクタとコンストラクタに明示的な理由はありますか?](https://stackoverflow.com/questions/4467142/why-is-明示的に許可されるデフォルトのコンストラクタとコンストラクタ2つ以上) –

答えて

46

C++では、11のマルチパラメータコンストラクタは、ブレースの初期化を使用して暗黙的に変換できます。

ただし、C++の前には、が単一引数のコンストラクタにのみ適用されます。複数引数コンストラクタの場合、無視され、had no effect

+1

説明をお寄せいただきありがとうございます。私はGCCがそのような機会を警告すると思うだろう。 – LiraNuna

+26

マルチargパラメータの1つを除くすべてがデフォルト値を持っていれば、それには効果があります – zebrabox

+20

これはC++ 11で変更されました。マルチパラメータコンストラクタは、ブレースの初期化を使用して暗黙的に変換できます。 – Shane

関連する問題