コンテンツへスキップ
Topos Uranos

要約

型が決めるのは、データが何バイトを占めるかだけではない。そのビットをどう読むかも決める。同じバイトが、char にとっては文字「A」であり、int にとっては数 65 である。このレッスンでは、基本型を文字と真偽値で補い、ある型から別の型への移り変わりを学ぶ。すなわち、コンパイラが頼まれもせずに行い、情報を失うことがある暗黙の型変換、static_cast による明示的な型変換、そして損失を拒む波括弧による初期化である。最後に、意図(「この値は変わらない」)をコンパイラが確かめる保証に変える定数 const と constexpr、およびソースコードに書かれた値の型を決めるリテラルと auto を扱う。

学習目標

  1. 文字の数値コードを使って計算する。たとえば、文字として読み取った数字の値を求める。
  2. 整数、実数、真偽値のあいだの暗黙の型変換の結果を予測し、static_cast で明示的な型変換を書く。
  3. 波括弧による初期化が情報を失う型変換を拒む理由と、それぞれの場合に GCC が何をするかを説明する。
  4. 変わってはならない値をすべて const または constexpr で宣言し、二つのキーワードを区別する。
  5. リテラル(5、5u、5.0、5.0f、'5'、"5")の型と、auto がそれに与える型を推論する。

解釈としての型

レッスン 変数とメモリ では、変数を名前・型・値をもつメモリの区画として紹介し、レッスン 整数とその表現 とレッスン 浮動小数点数 では、区画の中にあるのは数ではなくビットであり、それをどう読むかを型が告げることを示した。このレッスンはこの考えをその帰結まで押し進める。型が読み方の規則であるなら、同じビットも読むときの型によって違うものを意味し、値をある型から別の型へ移すこと、C++ で型変換と呼ばれるものは、規則を取り替えることにほかならない。値を保つ型変換もあれば(整数 7 は実数 7.0 になり、何も失われない)、値を変える型変換もある(実数 2.7 は整数 2 になる)。ここから、このレッスン全体を貫く問いが生まれる。型変換のたびに、値は保たれるのか、そしてそれを誰が確かめるのか。