상세 컨텐츠

본문 제목

[C++11] Trailing return types

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 23. 18:39

본문

'Trailing Return Types'은 C++11에서 도입된 것으로 함수의 '반환 타입을 함수 본문 뒤에 지정하는 형태'의 문법이다.

 

이전의 C++에서는 함수의 반환 타입을 함수 이름과 함께 선언하고, 함수 본문전에 위치시켜야 했지만, 탬플릿 함수와 같이 반환 타입이 복잡하거나 '타입 추론'이 어려운 경우가 종종 있었다.

 

이러한 문제를 해결하기 위해 나온 것이 trailing return types 문법이다.

 

문법은 다음과 같다.

auto functionName(parameters) -> return_type {
    // 함수 본문
}

보통 `auto`키워드와 함께 사용되며, `return_type`은 실제 반환 타입을 나타낸다.

 

이렇게 함으로써 코드의 가독성을 높일 수 있다. 도한, `return_type`에서 사용된 타입 정보를 주론하여 반환 타입을 결정할 수 있다.

 

또한, '람다'에서도 유용하게 사용할 수 있다.

auto g = []() -> int {
	return 123;
};

그리고 유독 템플릿에서 유용한데 다음과 같이 타입을 추론하지 못하는 상황에서 유용하다.

// NOTE: This does not compile!
template <typename T, typename U>
decltype(a + b) add(T a, U b) {
    return a + b;
}

// Trailing return types allows this:
template <typename T, typename U>
auto add(T a, U b) -> decltype(a + b) {
    return a + b;
}

 

C++14에서는 위의 문법이 다음과 같이 대체될 수 있다.

decltype(auto)

관련글 더보기