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
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] thread에서 return 값 받기 (promise/future) (2) | 2021.09.30 |
---|---|
[C++] 명시적 링크 (Explcit Linking) 시 GetProcAddress NULL 반환 (0) | 2021.07.29 |
[C++] std::string ↔ std::wstring (0) | 2021.06.09 |
[C++] Implicit Linking/Explicit Linking 장단점 (0) | 2021.04.09 |
[C++] 가상 파괴자(Virtual Destructor)의 필요성 (0) | 2021.04.09 |