• ベストアンサー

C++、クラスメンバの構造体配列の初期化について

クラスのメンバに構造体の配列を持っていて、その構造体はfloat値を4つ持ってます。 私はいつもメンバ変数の初期化はコンストラクタでしています。 クラス生成時に全てのfloatを0で初期化したいのですが、これはコンストラクタでfor文を回すしかないのでしょうか? 一文で初期化することは出来ないのでしょうか? 話は少し変わってしまいますが、今思ったのですがコンストラクタで値を決めるのは初期化じゃなくて代入と呼ぶのですかね? ご助力よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

memsetで0にする場合。 float の 0.0f が、内部表現の オール0 になっている、とは限りません。 一致しない表現が採用されているかもしれません。 memsetがforループより効率がいいかどうか、わかりません。 実際の動作が forが ・「sizeof(float)ずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数 memsetが ・「1byteずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数*sizeof(float) + 関数の呼び出しのオーバーヘッド なら、forの方が効率がよいはずです。 利用できるのなら、 std::array等にする、というのも手です。

majuppitto
質問者

お礼

御返事遅くれてしまい申し訳ございません。 ありがとうございました!

その他の回答 (3)

回答No.4

> クラス生成時に全てのfloatを0で初期化したいのですが A::A() { std::fill(ary, ary+4, 0.0f); }

majuppitto
質問者

お礼

御返事遅くれてしまい申し訳ございません。 ありがとうございました!

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

floatの配列を0で初期化というだけなら float a[16] = {0}; のようにすればできたかと。 質問の方では構造体のメンバとしてfloatが複数あって、配列なのは構造体の方なので上記の手は使えません。 ですがC++での構造体はデフォルトのアクセス指定子がpublicなクラスでもありますから、その構造体のコンストラクタを作っておいて、そこでfloat変数を初期化するという手もあります。

majuppitto
質問者

お礼

御返事遅くれてしまい申し訳ございません。 ありがとうございました!

noname#208507
noname#208507
回答No.1

ゼロで初期化するだけなら、C言語標準のmemset関数が使えますね。

majuppitto
質問者

お礼

御返事遅くれてしまい申し訳ございません。 ありがとうございました!

関連するQ&A

専門家に質問してみよう