プロが教える店舗&オフィスのセキュリティ対策術

クラスのメンバに構造体の配列を持っていて、その構造体はfloat値を4つ持ってます。
私はいつもメンバ変数の初期化はコンストラクタでしています。
クラス生成時に全てのfloatを0で初期化したいのですが、これはコンストラクタでfor文を回すしかないのでしょうか?
一文で初期化することは出来ないのでしょうか?

話は少し変わってしまいますが、今思ったのですがコンストラクタで値を決めるのは初期化じゃなくて代入と呼ぶのですかね?

ご助力よろしくお願いします。

A 回答 (4件)

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2014/06/15 02:53

memsetで0にする場合。



float の 0.0f が、内部表現の オール0 になっている、とは限りません。
一致しない表現が採用されているかもしれません。


memsetがforループより効率がいいかどうか、わかりません。

実際の動作が
forが
・「sizeof(float)ずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数
memsetが
・「1byteずつの書き込み+ループカウンタの計算+ループカウンタの比較」 が配列要素数*sizeof(float) + 関数の呼び出しのオーバーヘッド
なら、forの方が効率がよいはずです。


利用できるのなら、 std::array等にする、というのも手です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/06/15 02:53

floatの配列を0で初期化というだけなら


float a[16] = {0};

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

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

お礼日時:2014/06/15 02:53

> クラス生成時に全てのfloatを0で初期化したいのですが



A::A() { std::fill(ary, ary+4, 0.0f); }
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/06/15 02:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!