2025. 3. 25. 17:11ㆍ프로그래밍 언어/C++
10. C++ 표준별 지원 변화
후행 반환 타입(trailing return type)은 C++11에서 처음 도입되었으며, 이후 C++14, C++17, C++20을 거치며 다양한 관련 기능들이 추가되었습니다. 각 표준은 함수의 반환 타입을 보다 유연하고 안전하게 정의할 수 있도록 기능을 확장해 왔습니다.
✅ C++11: 후행 반환 타입, auto 및 decltype 도입
C++11은 후행 반환 타입 문법을 공식적으로 도입한 첫 번째 표준입니다. 이를 통해 복잡한 반환 타입을 함수 시그니처의 뒤쪽에 명시할 수 있게 되었으며, 템플릿 함수나 표현식 기반 타입 추론에서 큰 이점을 제공합니다.
auto add(int a, int b) -> int {
return a + b;
}
이와 함께 도입된 auto는 변수 선언 시 타입을 자동으로 추론할 수 있게 하였고, decltype은 표현식의 정확한 타입을 추론할 수 있도록 해주었습니다.
decltype(1 + 2.0) x = 3.5; // x는 double 타입
이 두 키워드는 후행 반환 타입과 결합하여 표현식 기반의 정밀한 반환 타입 명시가 가능하게 되었습니다.
✅ C++14: 함수 반환 타입 추론, decltype(auto) 도입
C++14에서는 함수의 반환 타입을 생략하고 자동으로 추론할 수 있는 기능이 추가되었습니다. 이로 인해 간단한 함수에서는 반환 타입을 별도로 명시하지 않아도 됩니다.
auto multiply(int a, int b) {
return a * b; // 반환 타입은 컴파일러가 int로 추론
}
또한 decltype(auto) 키워드가 도입되어, 반환 타입 추론 시 참조성과 const 성질을 유지할 수 있게 되었습니다.
const int x = 10;
const int& ref = x;
decltype(auto) y = ref; // y는 const int&로 추론됨
이 기능은 후행 반환 타입 없이도 참조 반환을 명확히 처리할 수 있어, 템플릿 함수와 범용 함수 작성 시 유용한 도구로 자리 잡았습니다.
✅ C++17: 클래스 템플릿 인자 추론 (CTAD)
C++17에서는 클래스 템플릿 인자 추론(Class Template Argument Deduction, CTAD)이 도입되어, 객체 생성 시 명시적으로 타입을 지정하지 않아도 컴파일러가 생성자 인자를 바탕으로 템플릿 타입을 추론할 수 있게 되었습니다.
std::pair p{1, 2.5}; // std::pair<int, double>로 자동 추론
비록 후행 반환 타입 자체의 문법 변화는 없었지만, 템플릿 타입 추론 능력이 향상됨에 따라 후행 반환 타입과의 결합이 더 자연스러워지고 사용성이 높아졌습니다. 예를 들어 std::make_unique, std::make_pair 등의 함수에서 반환 타입을 명시하지 않고도 복잡한 타입을 안전하게 반환할 수 있습니다.
✅ C++20: Concepts와 requires 절을 활용한 타입 제약
C++20은 Concepts 기능을 도입하여 템플릿 인자에 대해 명시적인 타입 제약을 걸 수 있게 했습니다. 이로 인해 함수 선언에서 타입 안전성이 크게 향상되었으며, 후행 반환 타입과 requires 절을 함께 사용할 수 있습니다.
예시 1: requires 절과 후행 반환 타입
template<typename T>
auto absolute(T value) -> T
requires std::is_arithmetic_v<T>
{
return value < 0 ? -value : value;
}
예시 2: 축약형 Concept 사용
auto square(std::integral auto x) -> decltype(x * x) {
return x * x;
}
이러한 문법은 후행 반환 타입과 결합되어 타입 조건 + 타입 표현을 동시에 명확하게 표현할 수 있게 해 줍니다. 특히 수학 연산 함수, 범용 알고리즘 등에서 타입 안전성과 코드 명료성을 동시에 확보할 수 있습니다.
✅ 요약
표준 버전 | 주요 변화 | 후행 반환 타입과의 관계 |
C++11 | 후행 반환 타입 문법 도입, auto, decltype | 기본 문법 제공, 복잡한 타입 표현 가능 |
C++14 | 반환 타입 자동 추론, decltype(auto) | 참조 반환 추론 가능, 함수 선언 간결화 |
C++17 | CTAD (클래스 템플릿 인자 추론) | 템플릿 기반 반환 타입과 더 잘 어우러짐 |
C++20 | Concepts, requires 절 도입 | 반환 타입 선언과 타입 제약을 통합 표현 가능 |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 후행 반환 타입(Suffix Return Type) - 12. 타 언어와의 비교 (0) | 2025.03.25 |
---|---|
C++ 후행 반환 타입(Suffix Return Type) - 11. 자주 발생하는 오류와 디버깅 팁 (0) | 2025.03.25 |
C++ 후행 반환 타입(Suffix Return Type) - 9. 실전 활용 예시 (0) | 2025.03.25 |
C++ 후행 반환 타입(Suffix Return Type) - 8. 장단점 정리 (0) | 2025.03.25 |
C++ 후행 반환 타입(Suffix Return Type) - 7. decltype(auto)와의 차이점 (0) | 2025.03.25 |