변수의 경우 선언되는 변수의 유형이 초기화 프로그램에서 자동으로 추론되도록 지정합니다. 함수의 경우 리턴 유형이 후행 리턴 유형이거나 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를 대체 할 유형을 결정합니다 (자세한 내용은 템플릿 인수 deduction # Other contexts 참조). 키워드 auto에는 유형 공제에 참여할 const 또는 &와 같은 수정자가 수반 될 수 있습니다. 예를 들어, 주어진 const auto& i = expr;
i의 유형은 template<class U> void f(const U& u)
함수가 호출되면 가상의 템플릿에서 인수 u의 유형과 정확히 일치합니다.f(expr)
컴파일되었습니다. 따라서 auto &&는 범위 기반 for 루프에서 사용되는 이니셜 라이저에 따라 lvalue 참조 또는 rvalue 참조로 추론 될 수 있습니다. auto를 사용하여 여러 변수를 선언하는 경우 추론 된 유형이 일치해야합니다. 예를 들어, 선언의 형식 auto i = 0, d = 0.0;
이 잘못되었지만 선언의 형식 auto i = 0, *p = &i;
이 양호하고 자동이 int로 추론됩니다.
2) 후행 리턴 유형 구문을 사용하는 함수 선언에서 키워드 auto는 자동 유형 감지를 수행하지 않습니다. 구문의 일부로 만 사용됩니다.
3) 후행 리턴 유형 구문을 사용하지 않는 함수 선언에서 키워드 auto는 템플리트 인수 공제 규칙을 사용하여 리턴 명령문의 피연산자에서 리턴 유형이 추론됨을 나타냅니다.
4) 변수의 선언 된 유형이 decltype (auto) 인 경우 키워드 auto는 이니셜 라이저의 표현식 (또는 표현식 목록)으로 대체되고 실제 유형은 decltype에 대한 규칙을 사용하여 추론됩니다.
5) 함수의 리턴 유형이 decltype (auto)로 선언되면 키워드 auto는 return 문의 피연산자로 대체되고 실제 리턴 유형은 decltype의 규칙을 사용하여 추론됩니다.
6) auto :: 형식의 중첩 이름 지정자는 제약 유형 플레이스 홀더 공제 규칙에 따라 클래스 또는 열거 유형으로 대체되는 플레이스 홀더입니다.
7) 람다 식의 파라미터 선언. (C ++ 14부터) 함수 매개 변수 선언. (개념 TS)
참고
C ++ 11까지 자동 저장 기간 지정의 의미를 가지고 있었다. 자동 변수와 함수를 하나의 선언으로 혼합하는 auto f() -> int, i = 0;
것은 허용되지 않습니다.
자세한 정보 : http://en.cppreference.com/w/cpp/language/auto