2012-02-05 20 views
9

可能性の重複:記号:
What does a colon following a C++ constructor name do?構造体コンストラクタ構文

私はオンラインの以下の例は、しかし、コンストラクタの構文は少し、特に私を混乱させるました。誰も私に簡単な説明を教えてくれませんか?ありがとう。

struct TestStruct { 
    int id; 
    TestStruct() : id(42) 
    { 
    } 
}; 
+0

の可能複製(http://stackoverflow.com/questions/1272680/what-does-a -colon-following-ac-constructor-name-do)を指定します。また、重複のリストも参照してください。[ここ](http://stackoverflow.com/questions/3504215/what-does-the-colon-mean-in-a-constructor) –

答えて

20

コンストラクタは、それが呼ばれていたときに42idを初期化します。初期化リストと呼ばれています。あなたのコンストラクタの唯一の目的は、メンバ変数

struct TestStruct { 
    int id; 
    double number; 
    TestStruct(int anInt, double aDouble) : id(anInt), number(aDouble) { } 
}; 
を初期化したとき

あなたの例では

、それはあなたにもいくつかのメンバーと、それを行うことができます

struct TestStruct { 
    int id; 
    TestStruct() 
    { 
     id = 42; 
    } 
}; 

と同等です

struct TestStruct { 
    int id; 
    double number; 
    TestStruct() : id(42), number(4.1) 
    { 
    } 
}; 

それは便利です

+1

「同じこと」はちょっとひどいです。誤解を招く –

+0

合意して編集:) – Vache

+4

クール、ありがたいですが、それは "有用"なのではなく、ベースのサブオブジェクト、定数、または参照など、非自明に初期化されなければならない変数にとっては絶対必要です。 –