제가 STL 공부하기전에 이펙티브 모던 C++ 보면서 C++14에서 새로 적용된 문법 공부하고있는데여
auto&&가 universal ref라고 해서 rval인지 lval인지 컴파일타임 때 컴파일러가 결정해준다고 그러더라구여...
그래서 아래와 같은 코드로 테스트를 해봤는데
int main ()
{
int a[3] = {1,2,3};
auto&& b = a[2];
b = 4;
cout << a[2]; // 4
return 0;
}
이러케 되더라구요. 이까지는 이해를 했어요, a[2]의 return 값이 int&이고,
auto&&가 a[2]의 타입을 따라간거니깐...
근데 뒤에 좀 더 읽다보니깐 decltype(auto)가 등장하더라구요.
decltype규칙을 따른다고 하는데, 이게 함수를 정의할때 반환값이 int& 더라도
반환 타입에 auto를 적으면 int가 된다고 하더라구요, 그래서 decltype(auto)를 명시함으로써 decltype 규칙을 따라 int& 된다고 합니다.
근데 함수 선언부가 아닌 스코프 안에서는 결국 decltype(auto)가 auto&&와 같은거겠네요?
잡다한게 되게 마니생겻군
http://lmgtfy.com/?q="auto&&"+"decltype(auto)"