본문 바로가기
C++/표준

[C++]C++ 버전 11 14 17

by 계양구놈팽이 2023. 2. 25.

이전에 면접을 보면서 C++에 대한 이야기를 주고 받다가 모던 C++로 넘어오면서 추가된 기능들에 대한 화제가 나온 적이 있다. 이전까지만 해도 버전별 특징을 아는것이 중요한가 싶었지만, 면접을 통해서 자신이 사용하는 도구(C++)에 대한 상세한 지식이 필요하다 느끼는 중요한 계기가 되었다.

 

그렇다면 사람들은 어째서 모던 C++에 이렇게 많은 관심을 가지게 되었을까???

 

1998년 C++98이 출시된 이후로 큰 업데이트가 없다가, 2011년에 C++11이 소개되면서 새로운 기능과 개선 사항을 도입하여 언어를 현대화하고 현대 소프트웨어 개발 방식에 맞추었기 때문이다. 그렇기에 사람들은 C++11을 "Modern C++"라고 부른다. 

 

현업에서 현재 가장 많이 쓰이고 있을 C++11 부터 17까지 세가의 버전별 개선점은 다음과 같다.

C++ 11:

  • Auto 키워드를 사용한 자동 타입 추론
  • 람다 표현식을 사용한 인라인 함수 객체
  • Range-based for loop을 사용한 반복 처리
  • 멀티스레딩 지원을 위한 Thread 라이브러리
  • Move semantics을 사용한 효율적인 리소스 관리
  • nullptr 키워드를 사용한 null 포인터 값
  • 자동 메모리 관리를 위한 스마트 포인터 (unique_ptr, shared_ptr, weak_ptr)

C++ 14:

  • 템플릿화된 함수 호출 연산자를 갖는 람다 표현식을 위한 Generic lambdas
  • 템플릿 변수를 위한 Variable templates
  • 일반 함수에서의 반환 타입 추론
  • constexpr 함수 개선 (변수 및 함수 템플릿)
  • 이진 리터럴과 숫자 구분자를 사용한 가독성 향상
  • 함수 및 타입을 표시하기 위한 [[deprecated]] 속성

C++17

  • 구조화된 바인딩을 위한 Structured bindings
  • 컴파일 타임 조건문을 위한 constexpr if
  • 가변 인자 템플릿 메타 프로그래밍을 위한 Fold expressions
  • 클래스 템플릿의 인수 추론
  • 중첩된 네임스페이스 정의를 통한 보다 간결하고 구조화된 네임스페이스 사용
  • 표준 라이브러리 개선 (예: std::optional, std::variant)