프로그래밍 공부
작성일
2024. 1. 10. 16:00
작성자
WDmil
728x90

1.2.6 타입 추론2

 

decltype(auto)

 

auto를 이용하면 표현식의 타입이 자동으로 연역된다.

 

만약 const 한정자가 붙어있다면, const 속성을 없애버린다.

 

decltype은 이런 효과가 없기 때문에, 중복코드를 만들게 되는데,

 

해결을 위해 C++14부터는 decltype(auto)를 도입했다.

const string message = "Test";

const string& foo()
{
	return message;
}

auto f1 = foo();

여기서 foo()를 호출하여 리턴값을 auto 변수에 담을 수 있다.

 

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

 

만약, f1이 const참조형을 유지하기 바란다면, 다음과같이 명시적으로 const를 표기해주어야 한다.

const auto& f1 = foo();

다른 방법은 decltype을 이용하면 된다.

decltype(foo()) f2 = foo();

이 경우는 f2가 const string& 타입이 된다.

 

하지만, foo()를 중복표기해야 하기 때문에 C++14에서는 다음과같은 방식으로 해결한다.

decltype(auto) f3 = foo();
728x90