C++11
From cppreference.net
<
cpp
C++11 은 C++의 두 번째 주요 버전이자 C++98 이후 가장 중요한 업데이트입니다. 기존 관행을 표준화하고 C++ 프로그래머가 사용 가능한 추상화를 개선하기 위해 많은 변화가 도입되었습니다.
C++11이 2011년 8월 12일 ISO에서 최종 승인되기 전까지는 2010년 이전에 출판될 것으로 예상되어 'C++0x'라는 이름이 사용되었습니다. C++03과 C++11 사이에는 8년이 걸려 지금까지 버전 간 가장 긴 간격이 되었습니다. 그 이후로 현재 C++는 3년마다 정기적으로 업데이트됩니다.
| 이 섹션은 불완전합니다 |
다음과 같은 기능들이 C++11에 통합되었습니다:
- TR1에서: TR1 : Special Functions 를 제외한 TR1 전체
- Boost에서: The thread library , exception_ptr , error_code 및 error_condition , 반복자 개선 사항 ( begin , end , next , prev )
- C에서: C 스타일 유니코드 변환 함수
목차 |
핵심 언어 기능
- auto 및 decltype
- 기본 설정된 및 삭제된 함수
- final 및 override
- 후행 반환 타입
- rvalue 참조
- 이동 생성자 및 이동 할당 연산자
- 범위 있는 열거형
- constexpr 및 리터럴 타입
- 목록 초기화
- 위임 및 상속된 생성자
- 중괄호 또는 등호 초기화자
- nullptr
- long long
- char16_t 및 char32_t
- 타입 별칭
- 가변 템플릿
- 일반화된 (비트리비얼) 공용체
- 일반화된 POD ( 트리비얼 타입 및 표준 레이아웃 타입 )
- 유니코드 문자열 리터럴
- 사용자 정의 리터럴
- 속성
- 람다 표현식
- noexcept 지정자 및 noexcept 연산자
- alignof 및 alignas
- 다중 스레드 메모리 모델
- 스레드 지역 저장소
- GC 인터페이스 (C++23에서 제거됨)
- 범위 기반 for (Boost 라이브러리 기반)
- static_assert (Boost 라이브러리 기반)
| 이 섹션은 불완전합니다 |
라이브러리 기능
헤더
- <array>
- <atomic>
- <cfenv>
- <chrono>
- <cinttypes>
- <condition_variable>
- <cstdint>
- <cuchar>
- <forward_list>
- <future>
- <initializer_list>
- <mutex>
- <random>
- <ratio>
- <regex>
- <scoped_allocator>
- <system_error>
- <thread>
- <tuple>
- <typeindex>
- <type_traits>
- <unordered_map>
- <unordered_set>
라이브러리 기능
- 동시성 지원 라이브러리
-
emplace()및 기존 라이브러리 전반에서의 rvalue 참조 사용 - std::unique_ptr
- std::move_iterator
- std::initializer_list
- 상태 저장 및 범위 지정 할당자
- std::forward_list
- chrono 라이브러리
- ratio 라이브러리
- 새로운 알고리즘 :
-
- std::all_of , std::any_of , std::none_of ,
- std::find_if_not ,
- std::copy_if , std::copy_n ,
- std::move , std::move_backward ,
- std::random_shuffle , std::shuffle ,
- std::is_partitioned , std::partition_copy , std::partition_point ,
- std::is_sorted , std::is_sorted_until ,
- std::is_heap , std::is_heap_until ,
- std::minmax , std::minmax_element ,
- std::is_permutation ,
- std::iota ,
- std::uninitialized_copy_n
| 이 섹션은 불완전합니다 |
결함 보고서
컴파일러 지원
C++11 핵심 언어 기능
|
C++11 기능
|
문서
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Embarcadero C++ Builder
|
IBM Open XL C++ for AIX
|
IBM Open XL C++ for z/OS
|
IBM XL C++
|
Sun/Oracle C++
|
HP aCC
|
Digital Mars C++
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C99 전처리기 | N1653 | 4.3 | 지원 |
19.0 (2015)*
(부분적)*
19.26* |
지원 | 4.1 | 11.1 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 10.1 | 5.9 | A.06.25 | 지원 | |
| static_assert ( 기능 테스트 매크로 ) * | N1720 | 4.3 | 2.9 | 16.0* | 예 | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | 8.52 | |
| 우측 각괄호 | N1757 | 4.3 | Yes | 14.0* | Yes | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| 확장된 friend 선언 | N1791 | 4.7 | 2.9 | 16.0* | Yes | 4.1 |
11.1 (부분적)
12.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
long long
|
N1811 | 예 | 예 | 14.0* | 예 | 예 | 예 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 예 | 예 | 예 | 예 | |
| auto | N1984 | 4.4 | 예 | 16.0* | 예 | 3.9 |
11.0
(부분적)*
12.0 |
2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| 위임 생성자 ( FTM ) * | N1986 | 4.7 | 3.0 | 18.0* | 예 | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| extern template | N1987 | 3.3 | 지원 | 12.0* | 지원 | 3.9 | 9.0 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| constexpr ( FTM ) * | N2235 | 4.6 | 3.1 | 19.0 (2015)* | 지원 | 4.6 |
13.0 (부분적)
14.0 |
2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 |
12.1 (부분적)
13.1 |
5.13 | A.06.28 | ||
char16_t
및
char32_t
(
FTM
)
*
|
N2249 | 4.4 | 2.9 | 19.0 (2015)* | 지원 | 4.4 |
12.1 (부분)*
14.0 |
2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | 8.52 | |
| 타입 트레이트 에 대한 컴파일러 지원. N2255* |
N2255
N2984 N3142 |
4.3 (부분적)*
4.8 (부분적)* 5 |
3.0 |
14.0*
(부분적)* 19.0 (2015)* |
지원 | 4.0 | 10.0 | 2015 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 13.1.3 | 5.13 | 6.16 | |||
| 템플릿 별칭 ( FTM ) * | N2258 | 4.7 | 3.0 | 18.0* | 지원 | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
| alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | 지원 | 4.8 | 15.0 | 2015 | 7.0 | 8.6 | 지원 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | 예 | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| 디폴트 및 삭제된 함수 | N2346 | 4.4 | 3.0 | 18.0* | Yes | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.25 | ||
강력한 타입의
enum
|
N2347 | 4.4 | 2.9 |
16.0*
(부분적)
17.0* |
예 | 4.0 | 13.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| 원자적 연산 | N2427 | 4.4 | 3.1 | 17.0* | 예 | 예 | 13.0 | 2015 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | ||||
| nullptr | N2431 | 4.6 | 2.9 | 16.0* | 지원 | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.27 | 8.52 | |
| 명시적 변환 연산자 | N2437 | 4.5 | 3.0 | 18.0* | 예 | 4.4 | 13.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| 참조 한정자 ( FTM ) * | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | 예 | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| 유니코드 문자열 리터럴 ( FTM ) * | N2442 | 4.4 | 3.0 | 19.0 (2015)* | 예 | 4.7 | 11.0* | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 |
10.1*
13.1.1* |
5.7 | A.06.28 | 8.52 | |
| 원시 문자열 리터럴 ( FTM ) * | N2442 | 4.5 | Yes | 18.0* | Yes | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1, except AIX xlC 13.1.3* | 5.13 | A.06.28 | 8.52 | |
| 인라인 네임스페이스 | N2535 | 4.4 | 2.9 | 19.0 (2015)* | 예 | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| 생성자 상속 ( FTM ) * | N2540 | 4.8 | 3.3 | 19.0 (2015)* | 예 | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| 후행 함수 반환 타입 | N2541 | 4.4 | 2.9 | 16.0* | 예 | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| 무제한 union s | N2544 | 4.6 | 3.0 | 19.0 (2015)* | 예 | 4.6 | 14.0* | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| 가변 인자 템플릿 ( FTM ) * |
N2242
N2555 |
4.3
(부분적)*
4.4 |
2.9 | 18.0* | 지원 |
4.3
(부분적)*
4.3 |
12.1 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 11.1 (부분적)* | 5.13 | A.06.27 | ||
| 표현식 SFINAE | N2634 | 4.4 | 2.9 | 19.14* | 지원 | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | |||||
| 지역 및 무명 타입을 템플릿 매개변수로 사용 | N2657 | 4.5 | 2.9 | 16.0* | 예 | 4.2 | 12.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.27 | ||
| 스레드 지역 저장소 | N2659 |
4.4 (부분적)
4.8 |
3.3* |
16.0*
(부분적)
19.0 (2015)* |
예 | 4.8 |
11.1 (부분적)
15.0* |
2015 | 8.4 | 예 | 17.1.0 | 1.1.0 |
10.1 (부분적)*
13.1.2 (부분적)* |
5.9 (부분적) | 8.52 (부분적) | |||
| 동시성을 고려한 동적 초기화 및 소멸 ( magic statics ) ( FTM ) * | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Yes | Yes | 11.1* | 2015 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | |||
| 가비지 컬렉션 및 도달 가능성 기반 메모리 누수 감지 | N2670 | |||||||||||||||||
| 초기화자 리스트 ( FTM ) * | N2672 | 4.4 | 3.1 | 18.0* | 예 | 4.5 |
13.0 (부분적)
14.0 |
2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| 비정적 데이터 멤버 초기화 ( FTM ) * | N2756 | 4.7 | 3.0 | 18.0* | 예 | 4.6 | 14.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
속성
,
[[
noreturn
]]
(
FTM
)
*
|
N2761 | 4.8 | 3.3 | 19.0 (2015)* | 예 | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
[[
carries_dependency
]]
|
N2556
N2643 |
3.3* | 17.1.0* | |||||||||||||||
전방 (불투명)
enum
선언
|
N2764 | 4.6 | 3.1 | 17.0* | 예 | 4.5 |
11.1 (부분적)
14.0 |
2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| 사용자 정의 리터럴 ( FTM ) * | N2765 | 4.7 | 3.1 | 19.0 (2015)* | 예 | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |||
| Rvalue references ( FTM ) * |
N2118
N2844 CWG1138 |
4.3
(부분적)*
4.5 |
2.9 |
16.0*
(부분적)*
17.0* |
예 | 4.5 |
11.1
(부분적)*
12.0 (부분적)* 14.0 |
2015 | 7.0* | 8.4 | 예 | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| 람다 표현식 ( FTM ) * |
N2550
N2658 N2927 |
4.5 | 3.1 |
16.0*
(부분적)*
17.0* |
지원 | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | 지원 | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | ||
| 범위 기반 for 루프 ( FTM ) * |
N2930
N3271 |
4.6 | 3.0 | 17.0* | Yes | 4.5 | 13.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | 예 | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.28 | ||
| 디폴트된 이동 특수 멤버 함수들 | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Yes | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 5.13 | A.06.25 | |||
| override 및 final |
N2928
N3206 N3272 |
4.7 | 2.9 |
14.0*
(부분적)
17.0* |
예 | 4.8 |
12.0
(부분적)*
14.0 |
2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| decltype ( FTM ) * |
N2343
N3276 |
4.3
(부분적)*
4.8.1 |
2.9 |
16.0*
(부분적)*
17.0* |
예 |
4.2
(부분적)*
4.8 |
11.0
(부분적)*
12.0 |
2015 | 7.0 | 8.4 | 예 | 17.1.0 | 1.1.0 | 11.1 (부분적)* | 5.13 | A.06.25 | 8.52 (부분적)* | |
|
C++11 기능 |
논문 |
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Embarcadero C++ Builder
|
IBM Open XL C++ for AIX
|
IBM Open XL C++ for z/OS
|
IBM XL C++
|
Sun/Oracle C++
|
HP aCC
|
Digital Mars C++
|
C++11 라이브러리 기능
|
C++11 기능
|
문서
|
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
IBM Open XL C/C++ for AIX*
|
Sun/Oracle C++*
|
Embarcadero C++ Builder*
|
|
|---|---|---|---|---|---|---|---|---|---|
| 정규 표현식 라이브러리 | N1429 | 4.9 | 2.8 | Yes | Yes | 17.1.0 | |||
| Type traits . N1836* |
N1836
N2240 N2244 N2255 N2342 N2984 N3142 |
4.3 (부분적)*
4.8 (부분적)* 5 |
3.0 |
14.0*
(부분적)* 19.0 (2015)* |
지원 | 17.1.0 | 5.13 | 지원 | |
컨테이너의 멤버 함수
cbegin
,
cend
,
crbegin
, 및
crend
|
N1913
LWG1192 |
4.3
(부분적)*
4.5 |
예* | 16.0* | 예* | 17.1.0 | |||
| 가비지 컬렉션 및 도달 가능성 기반 메모리 누수 탐지 ( 라이브러리 지원 ) | N2670 |
6
(no-op)* |
3.4
(no-op)* |
19.0 (2015)*
(no-op)* |
예
(no-op)* |
17.1.0 | |||
| Money, Time, and hexfloat I/O manipulators |
N2071
N2072 |
5 | 3.8 | 19.0 (2015)* | Yes | 17.1.0 | 5.15 | ||
| COW(copy-on-write) 방식의 COW (copy-on-write) std::basic_string 사용 금지 | N2668 | 5 | Yes | Yes | Yes | 17.1.0 | Yes | ||
|
C++11 기능 |
논문 |
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
IBM Open XL C/C++ for AIX*
|
Sun/Oracle C++*
|
Embarcadero C++ Builder*
|
*
- 별표로 표시된 셀 위에 마우스를 올리면
*
추가 팝업 노트를 볼 수 있습니다.
DR
nn
- "DR" 뒤의 숫자
nn
는 결함 보고서가 적용되는 대상 C++ 개정판을 나타냅니다(예: DR20 → C++20).
외부 링크
| 1. | C++11 - 위키백과 |
| 2. | 실제 동작하는 C++11 예제 |