使っているコンパイラはvisual C++ 2008です。
class myclass
{
int i=0;
};
のような定義をすると、
static const int データ メンバ以外をクラス内で初期化することはできません
というエラーメッセージが出るのですが、クラス内で初期化できないのというのには何か理由があるのでしょうか?
よろしくお願いします。
C++98 では、整数型の static const メンバしか class 内で初期化できなかった。 この制限は初期化がコンパイル時点で行えることを保証するためのものだ。
class 内メンバ初期化子
ということだそうです。
C++11ではできるように変更されました。
出来てもいいかも知れません。がしかし、コンストラクタ内で初期化するのが、本来解ではないでしょうか。
例えば継承した時、継承したクラスで新しくコンストラクタを書いた時に、どっちが優先されるべきだと思いますか?
例えば
class myclass
{
int i=0;
};
class subclass : public myclass
{
subclass{ i=1; }
};
みたいに書いたら、subclassのインスタンスを作った直後は、iは0なんですかね、1なんですかね?
C++11を調べれば回答が出てると思いますが、逆に調べないと判らないという記載はよろしくないと思いますよ(その程度、今後そのソースを読む人全てが把握してるべきだという意見はもっともと思いつつ、傲慢じゃないかとも思うのです)。
コメント(0件)