Accelerated C++ 第1章

変数とオブジェジェクト

変数とオブジェクトの違いは重要です。
(中略)
名前のないオブジェクトも作れるからです。

C++オブジェクト指向言語に類するのだなぉ。

入出力ライブラリのバッファがフラッシュされるケース
  1. バッファが一杯になった場合
  2. 標準入力ストリームから、読み込むよう要求された場合
  3. 明示的にフラッシュを要求した場合

最近バッファのフラッシュが気になるようなプログラムは書いてないので、ちょっと懐かしい気分。

std::string

std::string s とするとき、s + t の t には、std::string、文字列リテルのほか文字でも良い。
なるほど。

課題

1-0

省略

1-1

いずれも有効。helloは指定された文字列リテラルで初期化される。messageはhelloと文字列リテラルとの演算結果であるstd::stringオブジェクトで初期化される。

1-2

messageの定義が無効。messageの初期化の値は+演算の結果から得られるが、+演算子は左結合。よって最初の式が文字列リテラルの結合となりエラーとなる。

1-3

正しい。同じ名前の変数が定義されているが、別のブロック内の定義のため、スコープが異なっており、問題なし。

1-4

正しい。同じ名前の変数が定義されているが、入れ子のブロック内の定義のため、スコープが異なっており、問題なし。
3行目末尾を};}としても空文が挿入されるだけで問題なし。

1-4

正しい。同じ名前の変数が定義されているが、入れ子のブロック内の定義のため、スコープが異なっており、問題なし。

1-5

正しくない。xの出力が定義されているブロックの外で行われており、参照できない。
修正は出力をブロックの中に入れる(行末の}を1行下へ移動)

1-6

1回の入力で、2回の出力が実行される。これは11ページに記載してある標準ライブラリの動作仕様。

標準ライブラリは文字列を読むときに、始めにある空白文字は入力から捨て去り、次の空白文字か、ファイルの終わりに達するまでを読み込みます。