変数の場合、宣言されている変数の型が初期化子から自動的に導出されるように指定します。関数の場合、戻り値の型が末尾の戻り値の型か、または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には、constや&などの修飾子が付いていて、タイプ控除に参加します。たとえば、const auto& i = expr;
と指定した場合、iのタイプは、f(expr)
という関数呼び出しがコンパイルされた場合、架空のテンプレートtemplate<class U> void f(const U& u)
の引数uのタイプとまったく同じです。したがって、自動& &は、範囲ベースの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++以降)関数のパラメータ宣言。 (コンセプトTS)
注 autoには、保存期間指定子の意味があります。 auto f() -> int, i = 0;
のように、1つの宣言で自動変数と関数を混在させることはできません。
詳細についてはhttp://en.cppreference.com/w/cpp/language/auto
です。マジック。それは新しい(_oh noes、悪いpun_)。今非同期は未来(_gasp_) – sehe
ここには、自動キーワードhttp://en.cppreferenceに関するリファレンスがあります。co.jp/w/cpp/language/auto – andyqee