5

私の知る限り、C ++ 11以前は、コンストラクター初期化リストでメンバー配列を初期化する唯一の方法は、次のようにすることでした。

MyClass::MyClass(int arg) : member(arg), memberArray() {
    // anything else that needs to be done in the c'tor
}

しかし、私は何人かの人々に、このメソッドに眉をひそめていると言ってもらいましたfor。コンストラクターの本体のループでゼロ初期化する方が安全で読みやすいでしょう。

まだC++11をサポートしていないので、初期化子リストなどを使用できません。コンストラクター初期化子リストでメンバー配列を初期化することを思いとどまらせるガイドラインはありますか?

また、テストはノーを示していますが、多次元配列にこの構文を使用しても問題はないはずですよね?(たとえば、これは特定のコンパイラが何らかの理由で台無しにする標準の一部ではありません...)

これが主観的な質問であるという意味ではありません。上記の構文を使用する/使用しない正当な理由があるかどうかを知りたいだけです。

助けてくれてありがとう。

4

1 に答える 1

5

StackOverflowでこの関連する質問を確認することをお勧めします:静的関数を使用して初期化リストのメンバー配列を初期化すると、探しているものを実現できます:

class MyClass
{
   typedef std::array< int, 2 > t_myA;
   static t_myA fillFunction(){ static t_myA const ret = {1,2}; return ret; };

   t_myA myArray;

   public MyClass();
}

MyClass::MyClass()
 : myArray( fillFunction() )
{
}
于 2012-11-15T13:04:47.390 に答える