C++
ISO C ++ 표준
수색…
소개
1998 년에는 C ++을 내부 표준 언어로 만드는 표준을 처음으로 게시했습니다. 그때부터 C ++은 C ++의 다른 방언으로 발전했습니다. 이 페이지에서 이전 버전과 비교하여 모든 다른 표준 및 변경 사항에 대한 개요를 확인할 수 있습니다. 이러한 기능을 사용하는 방법에 대한 자세한 내용은보다 전문화 된 페이지에서 설명합니다.
비고
C ++이 언급 될 때 종종 "표준"에 대한 참조가 만들어집니다. 그러나 정확히 그 표준은 무엇입니까?
C ++는 오랜 역사를 가지고 있습니다. Bell Labs 내에서 Bjarne Stroustrup이 만든 작은 프로젝트로 시작하여 90 년대 초반에 꽤 인기를 얻었습니다. 여러 회사가 C ++ 컴파일러를 작성하여 사용자가 다양한 컴퓨터에서 C ++ 컴파일러를 실행할 수 있도록했습니다. 그러나 이것을 촉진하기 위해 모든 경쟁 컴파일러는 언어에 대한 단일 정의를 공유해야합니다.
이 시점에서 C 언어는 성공적으로 표준화되었습니다. 이것은 언어에 대한 정식 설명이 작성되었음을 의미합니다. 이것은 ANSI (American National Standards Institute)에 제출되었으며 검토를 위해 문서를 열어 1989 년에 출판했습니다. 1 년 후 국제 표준기구 (다른 언어로 된 두문자어를 사용하기 때문에 한 가지 형식을 선택했습니다. , ISO, 그리스어 isos에서 파생 된, 동등한 의미)는 미국 표준을 국제 표준으로 채택했습니다.
C ++의 경우 처음부터 국제적인 관심이 있음이 분명했습니다. ISO 내의 작업 그룹이 시작되었습니다 (WG21, SubCommittee 22 내). 이 작업 그룹은 1995 년경에 첫 번째 표준을 만들었습니다.하지만 프로그래머가 알다시피, 막판 기능보다 계획된 전달에 위험한 점이 전혀 없었으며 그 점이 C ++에도있었습니다. 1995 년에 STL이라는 멋진 새 라이브러리가 등장했으며 WG21에서 근무하는 사람들은 C ++ 드래프트 표준에 슬림화 된 버전을 추가하기로 결정했습니다. 당연히이 때문에 마감 기한이 누락되어서 불과 3 년 후 최종 문서가 완성되었습니다. ISO는 매우 공식적인 조직이므로 C ++ 표준은 ISO / IEC 14882라는 이름도 붙이지 않았습니다. 표준이 업데이트 될 수 있기 때문에이 정확한 버전은 14882 : 1998로 알려졌습니다.
그리고 실제로 표준을 개정 할 것을 요구했습니다. 이 표준은 매우 두꺼운 문서로, C ++ 컴파일러의 작동 방식을 정확하게 설명하는 것을 목표로합니다. 약간의 모호함조차도 수정할만한 가치가있을 수 있으므로 2003 년까지 14882 : 2003으로 업데이트가 릴리스되었습니다. 그러나 이것은 C ++에 어떤 기능도 추가하지 못했습니다. 새로운 기능은 두 번째 업데이트를 위해 계획되었습니다.
비공식적으로이 두 번째 업데이트는 C ++ 0x로 알려 졌는데, 2008 년 또는 2009 년까지 걸릴지 여부가 알려지지 않았기 때문입니다. 그 버전도 약간 지연되어 14882 : 2011가되었습니다.
운 좋게도, WG21은 그러한 일이 다시 일어나지 않기로 결정했습니다. C ++ 11은 호평을 받았으며 C ++에 다시 관심을 갖게되었습니다. 따라서 추진력을 유지하기 위해 세 번째 업데이트는 3 년 후 계획에서 출판에 이르기까지 14882 : 2014가되었습니다.
그 일은 거기에서도 멈추지 않았습니다. C ++ 17 표준이 제안되었고 C ++ 20의 작업이 시작되었습니다.
현재 작업 초안
공개 된 모든 ISO 표준은 ISO 상점 ( http://www.iso.org )에서 판매 할 수 있습니다. C ++ 표준의 작업 초안은 공개적으로 무료로 제공됩니다.
다른 버전의 표준 :
- 예정 (C ++ 20 또는 C ++ 2a라고도 함) : 현재 작업중인 초안 ( HTML 버전 )
- 제안 (때때로 C ++ 17 또는 C ++ 1z라고도 함) : 2017 년 3 월 작업 초안 N4659 .
- C ++ 14 (때때로 C ++ 1y라고도 함) : 2014 년 11 월 작업 초안 N4296
- C ++ 11 (때때로 C ++ 0x라고도 함) : 2011 년 2 월 작업 초안 N3242
- C ++ 03
- C ++ 98
C ++ 11
C ++ 11 표준은 C ++ 표준의 주요 확장입니다. 다음 은 isocpp FAQ 에 그룹화되어있는 변경 사항의 개요와 자세한 문서로 연결되는 링크입니다.
언어 확장
일반 기능
- 자동
- 선언 형
- 범위 명령문
- 이니셜 라이저 목록
- 통일 된 초기화 구문과 의미
- 가치있는 참조 및 이동 의미
- 람다
- 예외 전파를 막기위한 noexcept
- constexpr
- nullptr - 널 포인터 리터럴
- 예외 복사 및 재 게시
- 인라인 네임 스페이스
- 사용자 정의 리터럴
수업
- = 기본값 및 = 삭제
- 기본 이동 및 복사 제어
- 생성자 위임
- 클래스 멤버 초기화 프로그램
- 상속 된 생성자
- 재정의 제어 : 재정의
- 재정의 제어 : 최종
- 명시 적 변환 연산자
기타 유형
- 열거 형 클래스
- long long - 더 긴 정수
- 확장 된 정수 유형
- 일반화 된 노동 조합
- 일반화 된 POD
템플릿
- Extern 템플릿
- 템플릿 별칭
- 가변성 템플릿
- 템플릿 인수로서의 로컬 형
동시성
- 동시성 메모리 모델
- 동시성을 이용한 동적 초기화 및 제거
- 스레드 로컬 저장소
기타 언어 기능
- C ++ 11에서 __cplusplus의 가치는 무엇입니까?
- 접미사 반환 형식 구문
- 좁히기 방지
- 오른쪽 꺾쇠 괄호
- static_assert 컴파일 타임 어설 션
- 원시 문자열 리터럴
- 속성
- 조정
- C99 기능
라이브러리 확장
일반
- unique_ptr
- shared_ptr
- weak_ptr
- 쓰레기 수거 ABI
- 튜플
- 형질 특성
- 함수와 바인딩
- 정규 표현식
- 시간 유틸리티
- 난수 생성
- 범위가 지정된 할당 자
컨테이너 및 알고리즘
- 알고리즘 개선
- 컨테이너 개선
- unordered_ * containers
- std :: array
- forward_list
동시성
C ++ 14
C ++ 14 표준은 종종 C ++ 11의 버그 수정이라고합니다. 여기에는 C ++ 11의 새로운 기능을 확장 한 대부분의 변경 사항 목록 만 포함됩니다. 다음 은 isocpp FAQ 에 그룹화되어있는 변경 사항의 개요와 자세한 문서로 연결되는 링크입니다.
언어 확장
- 이진 리터럴
- 일반화 된 반환 유형 공제
- decltype (자동)
- 일반화 된 람다 캡처
- 일반 람다
- 변수 템플릿
- 확장 된
constexpr
-
[[deprecated]]
속성 - 자릿수 구분 기호
라이브러리 확장
- 공유 잠금
-
std::
types에 대한 사용자 정의 리터럴 -
std::make_unique
- 유형 변환
_t
별칭 - 유형별 튜플 주소 지정 (예 :
get<string>(t)
) - 투명한 연산자 Functor (예 :
greater<>(x)
) -
std::quoted
지원 중단 / 제거됨
-
std::gets
는 C ++ 11에서 사용되지 않으며 C ++ 14에서 제거되었습니다. -
std::random_shuffle
은 더 이상 사용되지 않습니다.
C ++ 17
C ++ 17 표준은 기능이 완벽하며 표준화를 위해 제안되었습니다. 이러한 기능을 실험적으로 지원하는 컴파일러에서는 일반적으로 C ++ 1z라고합니다.
언어 확장
- 접기 식
-
auto
non-type 템플릿 인수 선언하기 - Copy Elision 보장
- 생성자에 대한 템플릿 매개 변수 공제
- 구조화 된 바인딩
- 조밀 한 중첩 네임 스페이스
- 새로운 속성 :
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
-
static_assert
대한 기본 메시지 -
if
및switch
초기화 프로그램 - 인라인 변수
-
if constexpr
- 표현 평가 보장 명령
- 과도하게 정렬 된 데이터에 대한 동적 메모리 할당
라이브러리 확장
-
std::optional
-
std::variant
-
std::string_view
- 연관 컨테이너의 경우
merge()
및extract()
-
<filesystem>
헤더가 있는 파일 시스템 라이브러리 . - 대부분의 표준 알고리즘의 병렬 버전 (
<algorithm>
헤더에 있음 ). -
<cmath>
헤더 에 수학 특수 함수 를 추가했습니다 . - map <>, unordered_map <>, set <> 및 unordered_set <> 사이의 노드 이동
C ++ 03
C ++ 03 표준은 주로 C ++ 98 표준의 결함 보고서를 처리합니다. 이러한 결함 외에도 하나의 새로운 기능 만 추가합니다.
언어 확장
C ++ 98
C ++ 98은 C ++의 첫 번째 표준화 된 버전입니다. C의 확장으로 개발 되었기 때문에 C ++에서 C를 분리하는 많은 기능이 추가되었습니다.
언어 확장 (C89 / C90과 관련하여)
- 클래스, 파생 클래스, 가상 멤버 함수, const 멤버 함수
- 함수 오버로딩, 연산자 오버로딩
- 한 줄 주석 (C-languague에서 C99 표준으로 도입되었습니다)
- 참고 문헌
- 신규 및 삭제
- 부울 유형 (C99 표준으로 C 언어에 도입되었습니다)
- 템플릿
- 네임 스페이스
- 예외
- 특정 캐스트
라이브러리 확장
- 표준 템플릿 라이브러리
C ++ 20
C ++ 20은 C ++ 17 표준을 기반으로 현재 개발중인 C ++의 표준입니다. 진행 상황은 공식 ISO cpp 웹 사이트 에서 추적 할 수 있습니다.
다음 기능은 2020 년을 목표로 한 C ++ 표준의 다음 릴리스에서 허용 된 것입니다.
언어 확장
지금은 어떤 언어 확장도 허용되지 않았습니다.
라이브러리 확장
현재 라이브러리 확장은 허용되지 않았습니다.