개발언어/C++
decltype(auto) vs auto
Jayyy.H
2020. 8. 4. 23:31
결론
auto
는 const
타입을 없애버리지만, decltype(auto)
는 const
타입을 유지한다.
다음과 같은 코드를 생각해 보자
#include <iostream>
#include <string>
const std::string _string("New string");
const std::string& func()
{
return _string;
}
int main(void)
{
auto str_auto = func();
str_auto[0] = 'O';
std::cout << "_string: " << _string << "\t str_auto:" << str_auto << std::endl;
/*
decltype(auto) str_decl = func();
str_decl[0] = 'O'; // 주석을 제거하면 이 부분에서 오류가 발생되어 컴파일되지 않음
std::cout << "_string: " << _string << "\t str_auto:" << str_decl << std::endl;
*/
return 0;
}
auto
가 const 한정자를 유지하고 있다면 위 str\_auto\[0\] = 'O';
부분은 실행되지 않을 것이다. 하지만 위 실행의 결과는 다음과 같다._string: New string str\_auto:Oew string
다시말해 auto str_auto
의 타입은 std::string
타입이고,decltype(auto) str_decl
의 타입은 const std::string&
타입이 된다.
따라서 위에서 auto str_auto 는 임시객체 복제본을 할당받은 것이므로 이에 주의하여야 한다.