49740


privateのint i = 5や構造体の初期化をこの場所でするのとコンストラクタの: を使って初期化するのとは処理内容はどう違うのでしょうか？  
またコンストラクタの定義内{
}の中ですることは初期化ではなく代入なのは知っているんのですが参考書のほうではデータの初期化はコンストラクタ初期化しにて行うとあるんのですが  
書いてある場所でも宣言と初期化を行っても同じ数値が出力されるため同じく初期化されてると思われます、、違いを教えてくれますでしょうか？

[code]

            #include <iostream>
            #include <string>
            #include <sstream>
            using namespace std;
            template<typename type>class test {
            private:
    
                typedef struct  {
                    type x;
                    type y;
                    string name;
                }st;
    
                st t{0,0,"no name"};
                type *p;
                st *stp;
    
                int a;
                int b;
                string name;
                int i = 5;
            public:
                static int counter;
    
                //test(){   }
    
                test(int aa = 0,int bb = 0,string n ="no name"):a(aa),b(bb),name(n)
                {
    
                }
    
    
                string view()const {
                    ostringstream os;
                    os << a << " : " << b << " : " << name <<" : "<<"\n";
                    return os.str();
                }
    
    
                int getcounter()const {
                    return counter;
                }
    
    
            };
    
            ostream& operator<<(ostream& os, const test<int> &t);
    
            istream& operator>>(istream& is, test<int> &t);
    
[/code]


CC BY-SA 4.0
2018-10-28T12:27:21.283
49733
2018-10-31T07:01:28.460
2018-10-31T07:01:28.460
2238
question
c++
クラスのデータの初期化の違いが知りたい。


コンストラクターの`:`と`{`の間に記述する初期化子リストは、記述した順ではなくクラス内で宣言した順に実行されるなど、分かりづらい仕様があります。加えて宣言行と初期化子リストとで記述が冗長にもなります。

この問題を改善するためC++11で[非静的メンバ変数の初期化](https://cpprefjp.github.io/lang/cpp11/non_static_data_member_initializers.html)機能が追加されました。ですので大きな違いはなく

  * 非静的メンバ変数の初期化の利点 
    * 記述が簡潔になる
    * 記述した順で実行される
  * 非静的メンバ変数の初期化の欠点 
    * C++11コンパイラが必要
    * `()`形式のコンストラクターが呼び出せない（[一様初期化](https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html)か代入が必要）

くらいでしょうか。


CC BY-SA 4.0
2018-10-28T23:08:33.077
49740
2018-10-28T23:08:33.077
4236
49733
answer