Program Language/C & C++

[C++] 타입추론 decltype(auto)

야곰야곰+책벌레 2021. 4. 9. 14:17
728x90
반응형

auto를 이용하면 표현식의 타입이 자동으로 연역된다. 만약 const 한정자가 붙어 있다면 const 속성을 없애버린다.

decltype은 이런 효과가 없기 때문에 중복된 코드를 만들게 된다. C++14에서는 이 문제를 해결하기 위해 decltype(auto)를 도입했다.

const string message = "Test";
const string& foo()
{
	return message;
}

// foo()를 호출해서 그 리턴 값을 auto 변수에 담을 수 있다.
auto f1 = foo();

그런데 auto는 함수 foo()의 리턴 값이 가진 const 속성을 없애버리기 때문에 f1은 string 타입이 되며 복제본이 만들어진다.

만약 f1이 const 참조형을 유지하길 원한다면 아래처럼 명시적으로 const를 표기해줘야 한다.

const auto& f1 = foo();
-------------------------------------------------------------------- -
decltype(foo()) f2 = foo();
-------------------------------------------------------------------- -
decltype(auto) f3 = foo();

이렇게 하면 f3의 타입이 foo()의 리턴 타입과 동일한 const string&가 된다.

728x90
반응형