반응형

C++14에서 달라진 점 (C++11과 비교)

C++14는 C++11의 기능을 다듬고 확장한 표준으로, 대규모 기능 추가보다는 기존 기능의 개선과 편의성 향상에 초점을 맞췄습니다. 아래는 C++11 대비 C++14에서 달라진 주요 내용을 정리한 것입니다.

1. 람다 함수의 확장

  • 제네릭 람다(Generic Lambdas)
    • 람다 함수의 매개변수 타입에 auto 사용 가능
    •  
      cpp
      auto lambda = [](auto x, auto y) { return x + y; };
    • 템플릿 함수처럼 동작하는 람다 작성 가능

2. constexpr 기능 강화

  • C++11의 constexpr 함수는 단순한 리턴만 가능했으나,
    C++14에서는 if문, 반복문, 지역 변수 선언 등 복잡한 로직을 지원
  • 더 많은 함수와 상황에서 constexpr 사용 가능.

3. 함수 반환 타입 추론

  • Return Type Deduction
    • 함수의 반환 타입을 auto로 지정하면, 구현부의 return문을 기반으로 타입이 자동 추론됨
    •  
      cpp
      auto func() { return 42; }

4. 표준 라이브러리 및 기타 개선

  • Reader-Writer Locks
    • 다중 스레드 환경에서 읽기/쓰기 락 지원(std::shared_timed_mutex 등)
  • std::exchange
    • 객체의 값을 새로운 값으로 교체하고, 이전 값을 반환하는 함수 템플릿(라이브러리 확장).
  • 이진 리터럴 지원
    • 0b 또는 0B 접두사로 이진수 리터럴 사용 가능
    •  
      cpp
      int n = 0b101010;
  • [[deprecated]] 속성
    • 함수, 변수 등에 deprecated 속성 부여 가능

5. 기타 언어 및 코드 스타일 관련 변화

  • 변수 템플릿(Variable Templates)
    • 변수도 템플릿으로 선언 가능
  • decltype(auto)
    • auto와 decltype의 타입 추론 결합
  • 람다 캡처 초기화
    • 람다 캡처 시 임의의 표현식으로 멤버 초기화 가능
  • 이종 탐색(Heterogeneous Lookup)
    • 연관 컨테이너에서 키 타입과 다른 타입으로 검색 가능

요약 표

C++14 개선점 및 추가 기능
구분 C++11 C++14
람다 일반 람다 제네릭 람다(매개변수에 auto 사용)
constexpr 단순 리턴만 가능 if/반복문/지역변수 등 복잡한 로직 지원
함수 반환 타입 명시적 타입, 일부 auto 지원 모든 함수에 auto 반환 타입 추론
표준 라이브러리 기존 컨테이너, 락 Reader-Writer 락, std::exchange 등 추가
리터럴 10진/16진 등 이진 리터럴(0b) 지원
속성 없음 [[deprecated]] 속성 추가
타입/템플릿 함수/클래스 템플릿 변수 템플릿, decltype(auto)
람다 캡처 변수 캡처만 가능 표현식 기반 캡처(초기화) 지원
 

C++14는 C++11의 기반 위에서 실질적인 코드 작성의 편의성과 성능, 타입 추론의 유연성을 크게 높였습니다

+ Recent posts