type deduction。type inference。
型を明示しない一部の文脈で、コンパイラが型を決定する仕組み。
変数定義では auto キーワードを用いて利用できる。
auto d { 5.0 }; // 5.0 は double リテラルなので、d は double と推論される文字列リテラルの型推論
std::stringまたはstd::string_viewに推論されたい場合、それらのリテラルを利用する。
using namespace std::literals;
auto s1 { "weeee"s } // "weeee"sはstd::stringのリテラル返り値の型推論
関数の返り値の型として auto キーワードを使用できる。
この場合、return文から型を決定する。
なお、コンパイル時に型を決定するため、複数のreturn文がそれぞれ異なる型を返す可能性がある場合エラーとなる。
前方宣言を利用している場合に、戻り値の型が変更されても、関数定義の修正のみで済むメリットがあるが、前方宣言で返り値の型がわからないので可読性は低下する。
通常の関数宣言では、関数パラメータの型を単に auto で省略することはできない。
ただし、C++20 以降では abbreviated function templates のように、auto を用いる文脈もある。
関連する構文
autoキーワードによって、返り値の型を後置する構文を利用できる。
返り値の型について、関数パラメータの変数を利用して表現することができる。
単に可読性を上げるためにも利用される。
// パラメータの変数aとbを+演算子で足し合わせた結果の型を、
// 関数g()の戻り値型とする
auto g(int a, int b) -> decltype(a + b)
{
return a + b;
}