C++11

위키백과, 우리 모두의 백과사전.

C++11(C++0x라고도 알려짐[1])은 ISO가 2011년 8월 12일에 승인한 C++ 프로그래밍 언어의 최신판이다.[2] 2000년대의 한 시점, 즉 늦어도 2009년 12월 31일에는 공개될 것으로 예상해 C++0x으로 불려 왔으나, 2010년이 되면서 아무리 늦어도 2010년대의 한 시점에 공개될 것으로 예상해 C++1x로 변경되었고 2011년 8월 12일에 들어서야 국제표준으로 확정되면서 C++1x는 최종적으로 C++11이 되었다. C++11은 핵심 언어에 여러가지를 추가하고 C++ 표준 라이브러리를 확장하고, 선택적인 확장안이었던 C++ 기술 보고서 1(C++TR1) 라이브러리의 수학적 특수 함수의 라이브러리 예외들이 대부분 흡수, 통합되었다.[3] C++11은 ISO/IEC 14882:2011라고 출판되었다.

이전 표준에서의 변화[편집]

C++ 의 수정은 핵심 언어와 표준 라이브러리 모두를 포함한다. 2011 표준안의 모든 활용에 대한 개발에서, 표준 위원회에서는 몇 가지 지침을 적용했다.

  • 안정성 및 C++98(가능하면 C언어와도)과의 호환성 유지
  • 핵심 언어의 확장보다는 표준 라이브러리를 이용하여 새로운 기능 추가
  • 프로그래밍 기술을 발전시킬 변화 선호
  • 특정 애플리케이션에서만 유용한 새로운 기술보다는 시스템이나 라이브러리 디자인에 유용하게 C++을 개선
  • 이전의 안전하지 않은 기술에 대해 좀 더 안전한 대안을 제공하여 type 안전성 증가
  • 성능 향상과 하드웨어 직접 조작 능력 강화
  • 실 세계의 문제를 해결할 수 있는 해법 제시
  • "부담 최소화"의 원칙 (어떤 유틸리티가 필요로 하는 추가적인 지원은 그 유틸리티를 사용할 때만 필요해야 함)
  • 전문 프로그래머가 필요로 하는 어떤 유틸리티도 제거하지 않고도, 쉽게 가르치거나 배울 수 있어야 함

프로그래머 중 초심자가 대다수이며, 많은 초심자들은 C++에 대한 지식을 늘리기 보다는 그들에게 특화된 언어 측면에만 매진하는 경향이 있기 때문에 그들에 대해 주의를 기울이는 것이 중요하다.

C++ 언어의 문법 확장[편집]

C++ 위원회의 주된 관심은 언어 문법을 개발하는 것이다. C++0x의 프리젠테이션 일정은 표준안에서 이 부분의 진행에 영향을 받는다. 언어의 문법적 범위는 멀티태스킹 지원, 제네릭 프로그래밍 지원, 초기화 방법 통합, 성능 향상 등으로 매우 증가하였다. 이 문서의 목적에 맞게, 문법적 기능과 변화는 "런타임 성능 향상", "컴파일 성능 향상", "편의성 향상", "새로운 기능"등의 4부분으로 그룹화하였다. 일부 기능은 여러 부분에서 언급될 수 있지만, 주된 기능에 대해서 한번씩만 설명할 것이다.

핵심 언어 - 런타임 성능 향상[편집]

아래 나열된 기능은 주로 메모리나 계산 속도에 대한 성능 향상을 제공한다.

  • rvalue 레퍼런스와 이동 생성자
  • 일반화된 상수식
  • POD에 대한 재정의

문법 기능의 컴파일 성능 향상[편집]

  • extern 템플릿

문법 기능의 편의성 향상[편집]

  • 초기화 리스트
  • 초기화 방법의 통합
  • 자료형 추론
  • 범위기반 for 반복문
  • 람다 함수와 람다 식
  • 함수선언의 다른 방법
  • 객체 생성의 향상
  • 명시된 가상함수 오버라이딩
  • 널 포인터 상수
  • 자료형에 안전한 enum
  • 템플릿의 괄호처리
  • 형변환 연산자로써의 explicit
  • 템플릿 별명
  • union에 대한 제한 해제

문법의 새로운 기능[편집]

C++ 표준 라이브러리의 변화[편집]

새로운 기능의 상당수는 C++0x 표준 라이브러리에서 소개된다. 이들중 상당수는 현재의 표준안에서도 구현될 수 있다. 하지만 일부는 C++0x의 새로운 문법에 의존한다. 새로운 라이브러리의 대부분은 C++ 표준 위원회의 TR1이라고 불리는 기술 보고서에서 정의되고 있으며 이는 2005년에 발표되었다. TR1의 대부분은 std::tr1 네임스페이스에서 현재 이용가능하다. C++0x에 맞게 그 네임스페이스를 std로 이동할 것이다. 하지만 C++0x 표준 라이브러리에서 TR1 기능이 제공됨에 따라, 초기 TR1에서 제공되지 않았던 기능들과 함께 적당한 위치로 업그레이드될 것이다. 또한 C++03에서 구현 가능했던 기능들을 C++0x에 맞게 향상되겠지만 오리지널 TR1 규정의 부분은 아니다. 위원회는 C++0x 표준안이 완료된 이후에 TR2를 계획하고 있다. C++0x를 만들면서 준비되지 못한 라이브러리 제안사항은 TR2나 그 뒤의 기술 보고서에서 다룰 것이다. 다음 제안 사항들은 C++0x에서 진행되고 있다.

적용[편집]

C++11은 GCC 4.3부터 C++0x라는 이름으로,[4] 그리고 4.7부터는 C++11로서[5] 시험적용되고 있고, Visual Studio 10[6]부터 Visual Studio 12[7]까지 부분적으로 적용되고 있다. GCC(>=4.3)으로 커맨드 라인에 -std=c++0x 을 추가함으로써 해당 컴파일러에서 지원하는 C++0x 표준으로 컴파일 할 수 있다.[4] GCC 4.7 이상의 버전에서는 -std=c++11과 -std=gnu++11 역시 지원한다.

인용[편집]

외부 링크[편집]