2011-01-26 13 views
2

可能性の重複:
What does a colon following a C++ constructor name do?私の構造定義にコロンを説明してください?

私はこのC++の構文を読んでトラブルを抱えているCUDA &についての本を読んでいます。何を探したらいいのか分からないので、ここに投稿しています。

struct cuComplex { 
    float r; 
    float i; 
    cuComplex(float a, float b) : r(a) , i(b) {} 
} 

cuComplexステートメントの機能は何ですか?具体的には:

cuComplex(float a, float b) : r(a) , i(b) {} 

私はそれについて学ぶことができますか?

+1

これはCの構文ではなく、C++です。 – bdonlan

+0

コンストラクタと同じに見えるC++を知っているなら。私はそれが同じセマンティックを持っていると思います – mathk

+0

私はCUDAを知らないので、これがCUDA構文かどうかわかりませんが、これは確かに有効なC++構文です:) – bdonlan

答えて

1

これは、C言語ではなくC言語であるため、構造体にはそのような方法で関数を含めることはできません(関数ポインタを含めることはできますが、質問には関係ありません)。これは2つの浮動小数点を取る型 "cuComplex"のコンストラクタです。渡された値で2つのメンバ変数 'r'と 'r'を初期化します。

コメントあたりの編集:r(a)とi(b)の部分は、メンバー変数をコンストラクタのパラメータの値で初期化しています。

+0

私は最初の部分を得るが、私はまだr(a)、i(b)を得ていない。もう少し説明できますか?ありがとう – ninjaneer

+0

それらはCに存在しますか?私はC++だけがそれらを持っているという印象を受けました。 –

+0

いいえ、彼らはCに存在しません。私は私の応答を編集する前に約30秒間 "C"タグを見逃しました:) –

6

これはC++の構文です。

cuComplex(float a, float b) 

は、この構造体に対して定義されたコンストラクタです。

: r(a) , i(b) 

と呼ばれます。ここで、ローカルメンバーrおよびiは、コンストラクターに渡されるパラメーターaおよびbに設定されます。

残りは空の関数の実装です。

+0

ああ私は見ていますので、r = aと同じです – ninjaneer

+1

いいえ、 r(a)を実行しますが、この場合、コピーコンストラクタは代入演算子と同じことを行います。 –

1

: r(a) , i(b) cuComplex ctorは、括弧内に値を割り当ててメモリを構築します。

struct cuComplex { 
    const float r; 
    const float i; 
    cuComplex(float a, float b) : r(a) , i(b) {} // ok 
} 

struct cuComplex { 
    const float r; 
    const float i; 
    cuComplex(float a, float b) { 
     r = a; 
     i = b; 
    } // fail because once allocated, const memory can't be modified 
} 
関連する問題