C++,メンバ変数の初期化について

使っているコンパイラはvisual C++ 2008です。
class myclass
{
int i=0;
};
のような定義をすると、
static const int データ メンバ以外をクラス内で初期化することはできません
というエラーメッセージが出るのですが、クラス内で初期化できないのというのには何か理由があるのでしょうか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2012/06/15 17:53:31
  • 終了:2012/06/22 17:55:08

回答(2件)

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342012/06/15 19:30:42

C++98 では、整数型の static const メンバしか class 内で初期化できなかった。 この制限は初期化がコンパイル時点で行えることを保証するためのものだ。

class 内メンバ初期化子

ということだそうです。
C++11ではできるように変更されました。

id:yossiy7 No.2

勇者よっしー回答回数778ベストアンサー獲得回数962012/06/16 00:17:33

出来てもいいかも知れません。がしかし、コンストラクタ内で初期化するのが、本来解ではないでしょうか。
例えば継承した時、継承したクラスで新しくコンストラクタを書いた時に、どっちが優先されるべきだと思いますか?
例えば
class myclass
{
int i=0;
};
class subclass : public myclass
{
subclass{ i=1; }
};

みたいに書いたら、subclassのインスタンスを作った直後は、iは0なんですかね、1なんですかね?

C++11を調べれば回答が出てると思いますが、逆に調べないと判らないという記載はよろしくないと思いますよ(その程度、今後そのソースを読む人全てが把握してるべきだという意見はもっともと思いつつ、傲慢じゃないかとも思うのです)。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません