Skip to content

C++:Decltype

What is decltype

decltype은 Auto를 커버하는 역할로도 쓰이고 여러가지 방향에서 사용이 됩니다. 대다수의 활용방식은 함수의 리턴 타입을 함수의 선언시 결정할 때 많이 쓰이게 됩니다. 예를 들자면 Template으로 변수를 2개 이상 만들었을 때, Template의 변수형 2개가 각각 다른 형이고 그 함수는 auto 반환이라 가정합시다. 그러면 Auto는 무엇을 반환할지 모르고 오류가 나게 됩니다. 그럴때 명확히 써주는 것이 Decltype 입니다.

좀 더 명확히 말하자면 Decltype은 컴파일러가 표현식의 데이터형을 맞춰 준다는 것 입니다.

decltype(std::string("안녕"));

아래 방법은 함수가 리턴형이 auto이고 template에 모호할 경우에 사용합니다.

#include <iostream>

template<typename T, typename Y>
auto Add(T a, Y b) -> decltype (a + b)
{
    return a + b;
}

int main(void)
{
    std::cout << Add('1', 5) << std::endl;
    std::cout << Add(std::string("안녕"), std::string("하삼?")).c_str() << std::endl;
    std::cout << Add(1000, 0.1234) << std::endl;

    return 0;
}

Alternative Function Syntax (->)
그 뒤에 decltype을 하면 반환형을 a+ b에 맞추겠다 라는 뜻이 됩니다. 한번 실행을 해보시면 감이 올 것 입니다.

Favorite site