変数の場合、宣言されている変数の型がその初期化子から自動的に推定されることを指定します。関数の場合、戻り値の型が末尾の戻り値の型であるか、またはその戻りステートメントから推定されることを指定します(C ++ 14以降)。
構文
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
説明
1)ブロックスコープ、名前空間スコープ、forループの初期化ステートメントなどで変数を宣言する場合、キーワードautoを型指定子として使用できます。初期化子のタイプが決定されると、コンパイラーは、関数呼び出しからのテンプレート引数の推論のルールを使用して、キーワードautoを置き換えるタイプを決定します(詳細については、テンプレート引数の推論#その他のコンテキストを参照してください)。キーワードautoには、型推論に参加するconstや&などの修飾子が伴う場合があります。たとえば、が与えられた場合、関数呼び出しconst auto& i = expr;
がiの型は、架空のテンプレートの引数uの型とまったく同じtemplate<class U> void f(const U& u)
です。f(expr)
コンパイルされました。したがって、auto &&は、範囲ベースのforループで使用される初期化子に従って、左辺値参照または右辺値参照のいずれかとして推定できます。autoを使用して複数の変数を宣言する場合、推定される型は一致する必要があります。たとえば、宣言のauto i = 0, d = 0.0;
形式は正しくありませんが、宣言auto i = 0, *p = &i;
は整形式であり、autoはintとして推定されます。
2)後続の戻り型構文を使用する関数宣言では、キーワードautoは自動型検出を実行しません。構文の一部としてのみ機能します。
3)後続の戻り型構文を使用しない関数宣言では、キーワードautoは、戻り値の型が、テンプレート引数の推定の規則を使用して、returnステートメントのオペランドから推定されることを示します。
4)変数の宣言されたタイプがdecltype(auto)の場合、キーワードautoは初期化子の式(または式リスト)に置き換えられ、実際のタイプはdecltypeの規則を使用して推定されます。
5)関数の戻り型がdecltype(auto)と宣言されている場合、キーワードautoはreturnステートメントのオペランドに置き換えられ、実際の戻り型はdecltypeの規則を使用して推定されます。
6)auto ::形式のネストされた名前指定子は、制約された型のプレースホルダーの推論の規則に従って、クラスまたは列挙型に置き換えられるプレースホルダーです。
7)ラムダ式のパラメーター宣言。(C ++ 14以降)関数パラメーター宣言。(コンセプトTS)
注意
C ++ 11までは、autoにはストレージ期間指定子のセマンティクスがありました。のように、1つの宣言に自動変数と関数を混在さauto f() -> int, i = 0;
せることはできません。
詳細情報:http : //en.cppreference.com/w/cpp/language/auto