Qaupot Blog
Software Engineering, Trip

113. auto with decltype / Cpp14

🕐 Sun, 28 Aug 2016 09:00:00 GMT 🕓 Wed, 25 Aug 2021 14:37:00 GMT

Auto with decltype (C++14)

decltype 의 인수로 auto가 올 수 있으며, auto의 타입의 추론 방식이 template 이 아닌 decltype 을 따릅니다.

#include <iostream>
int referenceInt = 1;

int& getReferenceValue()
{
    return referenceInt;
}

int main(int argc, const char * argv[])
{
    auto autoVar = getReferenceValue();
    decltype(auto) declVar = getReferenceValue();
    
    printf("%s %s\n",typeid(autoVar).name(),typeid(declVar).name());
    printf("%p %p %p\n",&referenceInt,&autoVar,&declVar);
    
    return 0;
}
i i
0x100001020 0x7fff5fbff76c 0x100001020 

getReferenceValue 함수는 referenceInt 의 Reference 를 넘깁니다. auto 와, decltype(auto) 로 받은 변수의 포인터 값을 찍어보면 위의 예제와 같은 결과를 얻을 수 있습니다.

auto 의 경우 typeid 가 int 이지만 포인터가 다르므로 int 타입으로 추론 되었습니다. (template argument deduction rules)

decltype(auto) 는 typeid 가 int 이면서 기존 변수와 포인터 값이 같기 때문에, int& 타입으로 추론 되었습니다. (decltype deduction rules)

함수 반환 자료형 자리에도 decltype(auto) 를 사용할 수 있으며, 함수 리턴값에 의해 반환 자료형이 추론되는 방식이 바뀝니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.