auto
およびtypeof
キーワード
auto
前の章でFile
変数を定義したとき、=
演算子の両側に型名を繰り返した。
これは冗長に感じる。また、型名が長い場合、面倒で、特にエラーが発生しやすくなる。
幸い、コンパイラは右辺の式から左辺の型を推測できるため、左辺の型名は不要だ。コンパイラが型を推測できるように、キーワードauto
を使用することができる。
auto
は、右側に型が明示されていなくても、あらゆる型に使用できる。
"auto"は自動の略語だが、自動型推論から来ているわけではない。これは、変数の寿命に関する概念である自動格納クラスから来ている。auto
は、他の指定子が適切でない場合に使用する。例えば、次の定義ではauto
を使用していない。
コンパイラは、i
の型を上記のimmutable int
と推論する。(immutable
については、後の章で説明する。)
typeof
typeof
は、式(単一の変数、オブジェクト、リテラルなど)を実際に評価することなく、その式の型を指定する。
以下は、typeof
を使用して、型を明示的に記述せずに指定する方法の例である。
上記の最後の2つの変数定義は、以下のものと同等だ:
実際の型がわかっている上記のような状況では、typeof
は明らかに必要ない。代わりに、変数の型を、型が変化する可能性のある他のコードと一致させたい、より複雑なシナリオで、通常はこのキーワードを使う。このキーワードは、後の章で説明するテンプレートやミックスインで特に役立つ。
演習
これまで見てきたように、100のようなリテラルの型はint
である(short
、long
、その他の型とは異なる)。1.2のような浮動小数点リテラルの型を判別するプログラムを書いてみよう。このプログラムでは、typeof
と.stringof
が役立つだろう。