C++11

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

 문법의 새로운 기능 
 템플릿에서의 가변 인자
 새로운 문자열 리터럴
 사용자 정의 리터럴
 멀티태스킹 메모리 모델
 TLS
 특수 멤버함수에 대해 기본값 사용및 삭제에 대한 명시적 표시
 long long int 자료형
 정적 assertion
 멤버에 대한 sizeof 허용

 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에서 진행되고 있다.
 표준 라이브러리의 업그레이드
 스레드
 튜플 자료형
 해시 테이블
 정규 표현식
 범용 스마트 포인터
 확장가능한 난수 생성기
 wrapper 레퍼런스
 함수객체에 대한 다형성이 있는 wrapper
 메타 프로그래밍을 위한 type traits
 함수객체의 리턴형에 대한 방법

 적용 
C++11은 GCC 4.3부터 C++0x라는 이름으로,http://gcc.gnu.org/projects/cxx0x.html 그리고 4.7부터는 C++11로서http://gcc.gnu.org/gcc-4.7/cxx0x_status.html 시험적용되고 있고, Visual Studio 10http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx부터 Visual Studio 12http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx까지 부분적으로 적용되고 있다.
GCC(>=4.3)으로 커맨드 라인에 -std=c++0x 을 추가함으로써 해당 컴파일러에서 지원하는 C++0x 표준으로 컴파일 할 수 있다.
GCC 4.7 이상의 버전에서는 -std=c++11과 -std=gnu++11 역시 지원한다.

 인용 

 같이 보기 
 C11 (C 버전)

 외부 링크 
 류광의 번역 이야기 - C++0x 글 모음

분류:C++
분류:프로그래밍 언어 표준