반응형
후위 반환 타입 (suffix return type)
• 함수 반환 타입을 뒤쪽에 적는 표기법
• C++11 부터 등장
• 「trailing return type」 라고도 한다.
[예제] 후위 반환 타입 (suffix return type)
auto add(int a, int b) -> int
{
return a + b;
}
int main()
{
int ret = add(1,2);
}
Q) 왜 새로운 표기법이 필요할까?
기존 형식도 개발자에게 큰 이질감은 있지 않았다.
그럼에도 후위 반환 타입이 필요한 경우는
복잡한 함수 템플릿이나 람다 표현식에 유용하기 때문이다.
int, double 등 타입 추론할 수 있게 인자를 주면 문제 없지만
인자가 서로 다른 타입으로 주어지는 경우 문제가 생긴다.
#include <iostream>
template<class T>
T add(T a, T b)
{
return a + b;
}
int main()
{
std::cout << add(1, 2) << std::endl;
std::cout << add(1.2, 2.1) << std::endl;
// std::cout << add(1, 2.1) << std::endl; // error
}
서로 다른 인자를 받기 위해
서로 다른 템플릿 T1, T2 받게 하였다.
함수 리턴 타입으로는 auto 키워드와 decltype 키워드 활용 (C++11)
C++14 부터는 decltye 후위 반환이 없더라도
auto 키워드만으로도 타입 추론할 수 있게 되었다.
#include <iostream>
template<class T1, class T2>
auto add(T1 x, T2 y)
{
return x + y;
}
int main()
{
std::cout << add(2, 3.1) << std::endl;
}
경우에 따라서는 컴파일러가 타입 추론하지 않고
개발자가 타입을 지정해주고 싶을 수 있다.
#include <iostream>
template<class T1, class T2>
auto add(T1 x, T2 y) -> int
{
return x + y;
}
int main()
{
std::cout << add(2, 3.1) << std::endl;
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] Lambda expression 지역 변수 캡처 (0) | 2025.01.18 |
---|---|
[C++] 람다 표현식 lambda expression (0) | 2025.01.17 |
[C++] 함수 삭제 function delete (0) | 2025.01.14 |
[C++] STL capacity와 size 함수 차이 (1) | 2025.01.13 |
[C/C++] extern 키워드 (0) | 2025.01.12 |
댓글