본문 바로가기
프로그래밍 언어/C++

[C++] 후위 반환 타입 (suffix return type)

by 까망 하르방 2025. 1. 15.
반응형

후위 반환 타입 (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++] decltype 키워드

 

[C++] decltype 키워드

decltype 키워드( ) 안의 표현식으로 타입 결정함수 템플릿 등 만들 때 주로 사용#include int main(){ int arr[3] = { 0, 1, 2 }; decltype(arr) x; x[0] = 100; x[1] = 200; x[2] = 300; for (auto v : x) { printf("%d\n", v); }}  Q)  Auto

zoosso.tistory.com

 

 

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;
}
반응형

댓글