- ベストアンサー
C++メンバイニシャライザリストの書き方とは?
- C++のメンバイニシャライザリストでは、メンバ変数を初期化する値をかっこ内に書くことができます。
- 例えば、クラスToken_streamのコンストラクタではfullとbufferの初期化が行われています。
- buffer(0)は、Token型のオブジェクトを0で初期化することを意味しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> ではどうしてbuffer('0')と書かないのですか? 意味が違います。buffer('\0') なら同じことになりますが。
その他の回答 (3)
- hanabutako
- ベストアンサー率54% (492/895)
AAA(char ch):value(0){} とchar型で入ってますよね? そしたら、char型としてcoutには処理されますよね。 先程お書きになった class BBB{ public: BBB():aaa(0){} AAA aaa; }; のところを class BBB{ public: BBB():aaa('a'){} AAA aaa; }; と書いてみたらどうなりますか? #3の回答通り、aaa(0)だと、文字コードの0で表現される文字である、ヌル文字が引数だと解釈されます。 よくわからないなら、これが何と表示されるかみてみると良いでしょう。 char c = 0; cout << c << endl; c = '0'だと0という文字の文字コード(ASCIIコードでは48)が代入されていて、 c = 0だと文字コード番号0の値であるヌル文字が代入されますので、 cに代入された値は異なります。 これもよくわからないならやってみると良いでしょう。 char c = '0'; cout << c << endl;
お礼
ありがとうございます。charに数を代入すると文字コードと解釈されるのですね。
- nondaku0
- ベストアンサー率66% (10/15)
0で初期化されます。 buffer(0)と書いた部分はToken(char ch)が呼び出されるからです。
補足
回答ありがとうございます。ではどうしてbuffer('0')と書かないのですか?本(ストラウストラップのプログラミング入門)にはbuffer(0)と書いてありました。
- hanabutako
- ベストアンサー率54% (492/895)
Tokenのコンストラクタにはこういうのがあるようですが... Token(char ch):kind(ch), value(0){} 例えば、 Token token(0); というのは上記のコンストラクタが処理してくれることを考えると、書けますよね。
補足
試しに以下のようなプログラムを書いて実行してみました。 #include <iostream> using namespace std; class AAA{ public: AAA(char ch):c(ch){} char c; }; class BBB{ public: BBB():aaa(0){} AAA aaa; }; int main(){ BBB bbb; cout << bbb.aaa.c << '\n'; return 0; } 実行結果は改行が表示されただけでした。では、0と表示されないのはなぜですか?
お礼
ありがとうございます。理解できました。