• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ メンバイニシャライザリストについて)

C++メンバイニシャライザリストの書き方とは?

このQ&Aのポイント
  • C++のメンバイニシャライザリストでは、メンバ変数を初期化する値をかっこ内に書くことができます。
  • 例えば、クラスToken_streamのコンストラクタではfullとbufferの初期化が行われています。
  • buffer(0)は、Token型のオブジェクトを0で初期化することを意味しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> ではどうしてbuffer('0')と書かないのですか? 意味が違います。buffer('\0') なら同じことになりますが。

koun
質問者

お礼

ありがとうございます。理解できました。

その他の回答 (3)

回答No.4

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;

koun
質問者

お礼

ありがとうございます。charに数を代入すると文字コードと解釈されるのですね。

  • nondaku0
  • ベストアンサー率66% (10/15)
回答No.2

0で初期化されます。 buffer(0)と書いた部分はToken(char ch)が呼び出されるからです。

koun
質問者

補足

回答ありがとうございます。ではどうしてbuffer('0')と書かないのですか?本(ストラウストラップのプログラミング入門)にはbuffer(0)と書いてありました。

回答No.1

Tokenのコンストラクタにはこういうのがあるようですが... Token(char ch):kind(ch), value(0){} 例えば、 Token token(0); というのは上記のコンストラクタが処理してくれることを考えると、書けますよね。

koun
質問者

補足

試しに以下のようなプログラムを書いて実行してみました。 #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と表示されないのはなぜですか?

関連するQ&A