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
'전문가를 위한 C++정리' 카테고리의 다른 글
1. C++와 STL 부딪혀보기 1.4 표준 라이브러리 1.4.1 std::vector (0) | 2024.01.11 |
---|---|
1. C++와 STL 부딪혀보기 1.3 객체지향 언어로서의 C++ 1.3.1 클래스의 정의 (0) | 2024.01.11 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.5 const가 사용되는 여러 가지 상황 (0) | 2024.01.10 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.4 예외 처리 (0) | 2024.01.10 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.3 C++의 문자열 (0) | 2024.01.09 |