- ベストアンサー
C++、クラスメンバの構造体配列の初期化について
クラスのメンバに構造体の配列を持っていて、その構造体はfloat値を4つ持ってます。 私はいつもメンバ変数の初期化はコンストラクタでしています。 クラス生成時に全てのfloatを0で初期化したいのですが、これはコンストラクタでfor文を回すしかないのでしょうか? 一文で初期化することは出来ないのでしょうか? 話は少し変わってしまいますが、今思ったのですがコンストラクタで値を決めるのは初期化じゃなくて代入と呼ぶのですかね? ご助力よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
memsetで0にする場合。 float の 0.0f が、内部表現の オール0 になっている、とは限りません。 一致しない表現が採用されているかもしれません。 memsetがforループより効率がいいかどうか、わかりません。 実際の動作が forが ・「sizeof(float)ずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数 memsetが ・「1byteずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数*sizeof(float) + 関数の呼び出しのオーバーヘッド なら、forの方が効率がよいはずです。 利用できるのなら、 std::array等にする、というのも手です。
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> クラス生成時に全てのfloatを0で初期化したいのですが A::A() { std::fill(ary, ary+4, 0.0f); }
お礼
御返事遅くれてしまい申し訳ございません。 ありがとうございました!
- wormhole
- ベストアンサー率28% (1626/5665)
floatの配列を0で初期化というだけなら float a[16] = {0}; のようにすればできたかと。 質問の方では構造体のメンバとしてfloatが複数あって、配列なのは構造体の方なので上記の手は使えません。 ですがC++での構造体はデフォルトのアクセス指定子がpublicなクラスでもありますから、その構造体のコンストラクタを作っておいて、そこでfloat変数を初期化するという手もあります。
お礼
御返事遅くれてしまい申し訳ございません。 ありがとうございました!
ゼロで初期化するだけなら、C言語標準のmemset関数が使えますね。
お礼
御返事遅くれてしまい申し訳ございません。 ありがとうございました!
お礼
御返事遅くれてしまい申し訳ございません。 ありがとうございました!