Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++98 vs C++03 vs C++0x vs C++11: C++ 표준 버전별 차이점 총정리

C++ 표준 버전의 발전 과정

C++는 오랜 시간 동안 꾸준히 발전해 온 프로그래밍 언어로, 각 표준 버전마다 언어의 성능과 편의성을 크게 향상시키는 변화가 있었습니다. 이 글에서는 C++98부터 C++11까지 각 표준 버전의 특징과 차이점을 살펴보겠습니다.

C++98 – 최초의 공식 표준

C++98은 C++ 역사상 최초로 제정된 국제 표준입니다. 이 표준에서는 클래스, 상속, 다형성 등 언어의 핵심 구조체와 함께 STL(표준 템플릿 라이브러리) 및 표준 라이브러리가 처음으로 공식적으로 정의되었습니다. 현대 C++ 개발의 기반이 된 중요한 이정표라 할 수 있습니다.

C++03 – 사실상의 버그 수정판

C++03은 C++98 표준에 대한 개정판으로, 새로운 기능 추가보다는 기존 표준의 결함을 보완하는 데 초점을 맞춘 버전입니다. 구체적으로 코어 언어 관련 결함 보고서 92건과 라이브러리 관련 결함 보고서 125건을 수정했으며, 새롭게 추가된 언어 기능은 값 초기화(value initialization) 단 하나뿐입니다.

C++0x – 완성을 기다리던 차세대 표준

C++0x는 당시 진행 중이던 차세대 C++ 표준의 잠정 명칭이었습니다. 원래 2008~2009년경 완성될 것으로 예상되었지만, 여러 사정으로 인해 최종 승인은 2011년으로 연기되었습니다. 'x'에는 완성될 연도의 마지막 자릿수가 들어갈 예정이었으나, 결과적으로 두 자릿수가 되면서 이름도 C++11로 확정되었습니다.

C++11 – 모던 C++의 시작

C++11은 2011년에 공식 발표된 현대적인 C++ 표준으로, 기존 언어에 수많은 확장과 개선을 가져온 대대적인 업그레이드였습니다. 흔히 '모던 C++'의 시대를 연 버전으로 평가받습니다. C++11의 주요 기능은 다음과 같습니다.

  • 초기화 리스트(Initializer lists)
  • 자동 타입 추론(auto)
  • Rvalue 참조와 이동 생성자(move constructor)
  • constexpr – 일반화된 상수 표현식
  • POD(Plain Old Data) 정의의 수정
  • 균일 초기화(uniform initialization)
  • 범위 기반 for 루프(range-based for loop)
  • 람다 함수와 람다 표현식
  • 대체 함수 문법(alternative function syntax)
  • 명시적 override 및 final 지정자
  • 상수 널 포인터 nullptr
  • 강력한 타입의 열거형(enum class)
  • 템플릿에서 오른쪽 꺾쇠 괄호(>>)가 적절한 위치에서 연산자로 해석되지 않도록 개선

이 외에도 스마트 포인터, 스레드 지원 라이브러리 등 방대한 기능이 추가되었습니다. 전체 기능 목록과 예제 코드는 Wikipedia의 C++11 문서에서 확인할 수 있습니다.

마무리

정리하면, C++98은 기본기를 다진 첫 표준, C++03은 결함을 보완한 안정화 버전, C++0x는 완성을 앞둔 작업명, 그리고 C++11은 모던 C++의 문을 연 혁신적인 표준이라고 할 수 있습니다. C++11 이후의 발전된 문법과 기능을 활용하면 더 안전하고 효율적인 코드를 작성할 수 있습니다.