C++14以降では,autoとdecltype()の役割が少し変わっているので注意すること.(関数の戻り値推論に使えるようになった)
この内容は現段階では,さらっと流す程度で良い.(後の範囲for文やテンプレートで出てくるため)
autoによる型宣言
例えばクラスのメンバ変数として「クラス中で特定の役割を与えられているが,その変数の型,つまり整数か実数かは,インスタンス化されてみないとわからない」という変数があったとする.この時に,
auto value = 値;
という形で変数を宣言すると,代入された値によっての型が決定される.
auto value = 10;
とすれば,変数valueはint型になり,
auto value = 10.0;
とすれば,変数valueはfloat型になる.
auto* ballPtr1 = new BounceBall();
auto* ballPtr1 = new ExpandedBall();
ExpandedBallがBounceBallの子クラスである時に,このように使うと,例えばExpandedBallとBounceBallが同じ名称のメンバインスタンス関数を持つ場合など,有効に使うことができる.
またその他に,後述のdecltype()
関数と組み合わせたり,if文やfor文の条件式に変数を入れたり,後の項で出てくる範囲for文に与えるリストを作ったりするのに使われる.
decltype()関数
auto i = 0; // iはint型になる
decltype(i) j = 0; // jはint型になる
という感じで,autoに続けて,それと同じ型の変数を作りたい,と言った場合に使われる.(autoで示したように,ポインタにしておいて複数のクラスのインスタンスを受け取れるようにしておく,などの方法もある)
実際に「必要」とされるのはテンプレートを使ってautoと組み合わせた場合なので,現段階では「そんなものか」程度で流してしまって問題ない.