2013-06-24 2 views
10

나는이 방법 기본적으로'자동'의 ref-and cv-stripping 속성.

auto var = expr; 

에서 자동차를 사용하여 변수를 선언하는 expr의 종류를 복용하고 &/& & -references과 모든 최상위 const와 및 volatileness을 제거 같은 것을 배웠습니다. 위의 내용이 이고 정확히 인 것을 의미합니까?

std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr; 
+2

C++ 14에서 곧 나오는'decltype (자동)'을 좋아할 수도 있습니다 :-) –

+0

@KerrekSB 자세한 내용을 제공해 주시겠습니까? – Ali

+0

'decltype (auto) x = foo();와 같이'decltype'의 참조 의미와 결합 된'auto'의 유형 공제입니다. –

답변

10

아니요. 사실이 아닙니다. auto var = expr;expr을 값으로 전달하는 것과 같습니다.

int x[1]; 
auto y = x; 

이것은 yint*한다.

는 대부분 auto x = expr;은 템플릿 유형 공제처럼 동작 :

template <typename T> 
void f(T); 
int x[1]; 
f(x); // deduces T as int* 

이 더 std::decay<decltype(expr)> var = expr; 같다.

+0

'std :: decay :: type var = expr;'* 정확히 *'auto var = expr'와 동일합니까? –

+7

정확하지 않습니다. 이것은 C++입니다 : 예외가없는 유일한 규칙은이 규칙입니다. 'auto x = [] {};'는 람다 형식이지만 람다는'decltype'에서 사용할 수 없습니다. –