要約
型が決めるのは、データが何バイトを占めるかだけではない。そのビットをどう読むかも決める。同じバイトが、char にとっては文字「A」であり、int にとっては数 65 である。このレッスンでは、基本型を文字と真偽値で補い、ある型から別の型への移り変わりを学ぶ。すなわち、コンパイラが頼まれもせずに行い、情報を失うことがある暗黙の型変換、static_cast による明示的な型変換、そして損失を拒む波括弧による初期化である。最後に、意図(「この値は変わらない」)をコンパイラが確かめる保証に変える定数 const と constexpr、およびソースコードに書かれた値の型を決めるリテラルと auto を扱う。
学習目標
- 文字の数値コードを使って計算する。たとえば、文字として読み取った数字の値を求める。
- 整数、実数、真偽値のあいだの暗黙の型変換の結果を予測し、
static_castで明示的な型変換を書く。 - 波括弧による初期化が情報を失う型変換を拒む理由と、それぞれの場合に GCC が何をするかを説明する。
- 変わってはならない値をすべて
constまたはconstexprで宣言し、二つのキーワードを区別する。 - リテラル(
5、5u、5.0、5.0f、'5'、"5")の型と、autoがそれに与える型を推論する。
解釈としての型
レッスン 変数とメモリ では、変数を名前・型・値をもつメモリの区画として紹介し、レッスン 整数とその表現 とレッスン 浮動小数点数 では、区画の中にあるのは数ではなくビットであり、それをどう読むかを型が告げることを示した。このレッスンはこの考えをその帰結まで押し進める。型が読み方の規則であるなら、同じビットも読むときの型によって違うものを意味し、値をある型から別の型へ移すこと、C++ で型変換と呼ばれるものは、規則を取り替えることにほかならない。値を保つ型変換もあれば(整数 7 は実数 7.0 になり、何も失われない)、値を変える型変換もある(実数 2.7 は整数 2 になる)。ここから、このレッスン全体を貫く問いが生まれる。型変換のたびに、値は保たれるのか、そしてそれを誰が確かめるのか。
コンテンツを読み込んでいます…