본문 바로가기

카테고리 없음

C++14 주요 특징

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를 지원합니다.