C++14는 C++11을 기반으로 한 소규모 업그레이드 버전으로, 성능 개선과 문법 간소화에 중점을 둔 업데이트입니다. C++14의 주요 특징을 정리하면 다음과 같습니다.
일반화된 람다 캡처 (Generalized Lambda Capture)
- C++11에서는 람다에서 변수를 캡처할 때 반드시 값을 직접 지정해야 했지만, C++14에서는 새로운 init-capture 기능을 도입하여 보다 유연한 변수 캡처가 가능해졌습니다.
#include <iostream>
int main() {
int x = 42;
auto lambda = [y = x + 10]() { std::cout << y << '\n'; };
lambda(); // 출력: 52
}
- 장점: 람다 내부에서 새로운 변수를 생성할 수 있어 편리함.
auto의 함수 반환 타입 유추 (Return Type Deduction)
- C++11에서는 auto가 변수 선언에만 사용되었지만, C++14에서는 함수의 반환 타입도 자동 유추할 수 있습니다.
auto add(int a, int b) {
return a + b; // 반환 타입 자동 유추 (int)
}
- 장점: 템플릿 함수 작성 시 더 유연한 코드 작성 가능.
decltype(auto)를 이용한 보다 정교한 타입 유추
- decltype(auto)를 사용하면 decltype을 적용한 것처럼 변수나 표현식의 정확한 타입을 유지할 수 있습니다.
int x = 10;
decltype(auto) y = (x); // y는 int& (참조 유지)
decltype(auto) z = x; // z는 int (값 복사)
- 장점: 기존 auto보다 원본 타입을 더 정확하게 보존.
가변 템플릿의 std::make_unique 지원
- C++11에서는 std::unique_ptr을 생성할 때 std::make_unique가 없어 new를 직접 사용해야 했습니다.
- C++14에서는 std::make_unique를 도입하여 안전한 메모리 관리를 지원합니다.
#include <memory>
auto ptr = std::make_unique<int>(42); // 안전한 동적 메모리 할당
- 장점: new 사용을 줄여 메모리 관리 실수 방지.
std::integer_sequence 및 std::index_sequence 추가
- 템플릿 메타프로그래밍을 단순화하기 위해 std::integer_sequence가 추가되었습니다.
#include <iostream>
#include <utility>
template <std::size_t... I>
void printIndexes(std::index_sequence<I...>) {
((std::cout << I << " "), ...);
}
int main() {
printIndexes(std::make_index_sequence<5>{}); // 출력: 0 1 2 3 4
}
- 장점: 템플릿 인덱스 기반 코드 간소화.
바이너리 리터럴 지원
- 0b 접두사를 사용하여 이진수 리터럴을 직접 표현할 수 있습니다.
int bin = 0b1010; // 10진수 10과 동일
- 장점: 가독성 향상.
구분자(')를 이용한 숫자 리터럴 가독성 개선
- 큰 숫자를 읽기 쉽게 하기 위해 '(작은 따옴표)를 숫자 구분자로 사용할 수 있습니다.
int largeNumber = 1'000'000; // 1000000과 동일
- 장점: 코드 가독성 향상.
C++14 요약
- C++11의 기능을 개선한 소규모 업데이트
- 가독성 향상 및 코드 간소화
- 람다 표현식, auto 활용 개선, 메타프로그래밍 지원 강화
- 바이너리 리터럴 및 숫자 구분자 지원
C++14는 C++11의 불편했던 점을 개선하고, 더 간결하고 직관적인 코드를 작성할 수 있도록 도와주는 업데이트였습니다.
Q&A
Q1: C++14는 C++11과 어떻게 다른가요?
A: C++14는 C++11을 기반으로 한 개선 버전으로, 새로운 기능보다는 기존 기능의 확장과 최적화에 초점을 맞추었습니다. 예를 들어, 람다 캡처 기능이 확장되고, auto의 반환 타입 유추가 가능해졌으며, std::make_unique가 추가되었습니다.
Q2: decltype(auto)와 auto의 차이점은 무엇인가요?
A: auto는 변수의 타입을 유추하지만, 참조 여부는 고려하지 않습니다. 반면 decltype(auto)는 원래 표현식의 타입(참조 포함)을 유지하여 더 정밀한 타입 유추가 가능합니다.
Q3: C++14를 사용하면 성능이 향상되나요?
A: 직접적인 성능 향상보다는 코드의 가독성과 유지보수성을 높이는 데 초점이 맞춰져 있습니다. 그러나 std::make_unique 같은 기능은 메모리 관리에서 성능 및 안정성을 향상시킬 수 있습니다.
Q4: C++14를 지원하는 주요 컴파일러는 무엇인가요?
A: 대부분의 최신 컴파일러(GCC 5.0 이상, Clang 3.4 이상, MSVC 2015 이상)에서 C++14를 지원합니다.