C++20
보이기
C++ 언어 버전 |
---|
C++98 • C++03 • C++11 • C++14 • C++17 • C++20 • C++23 |
C++20은 C++ 프로그래밍 언어를 위한 표준인 ISO/IEC의 개정판을 지칭하는 비공식적인 이름이다.[1] C++20은 C++17의 후속작이다. 표준 위원회는 C++20 계획을 2017년 7월에 시작했다.[2] 현재 기안은 N4750이다.[3]
아래는 C++20에 추가되기로 제안되었거나 논의된 항목들의 일부이다.[4]
새 기능 후보
[편집]2017년 7월에 C++20의 초안에 포함되기로 건의된 항목들:[5]
- 콘셉트[6]
- 지정 생성자[7] (designated initializer, C99의 기능 기반)
- 람다 갈무리(capture)에
[=, this]
사용 가능[8] - 람다에서 템플릿 파라미터 리스트 사용[9]
2017년 11월에 열린 가을 회의에서 C++20에 추가하기로 건의된 항목들:[10]
- 우주선 연산자(
operator <=>
)를 이용한 세갈래 비교(Three-way comparison) - 범위 기반
for
문 안에서 추가 변수의 초기화 memcpy()
보다 덜 장황하면서 컴파일러 내부를 활용할 수 있게 해주는 비트 단위 객체 복사(Bit-casting of object representations)std::shared_ptr
를 위한std::atomic
의 특수화- 평가되지 않은 콘텍스트에서의 람다[11][12]
- 생성과 할당이 가능하고 상태가 없는 기본 람다[13]
- 람다 init-capture에서 pack expansion을 지원[14]
- 템플릿 파라미터에서 문자열 리터럴 사용 가능[15]
그 외 가능성이 있는 항목들:
- 코루틴[16] - Clang 5에서 시험적으로 지원함[17]
- 모듈[18] - Clang 5[19]와 비주얼스튜디오 2015 업데이트 1[20]에서 시험 적용
- 트랜잭셔널 메모리[21]
- 리플렉션[22]
- 메타클래스[23]
라이브러리 변경 후보
[편집]- 어토믹 스마트 포인터[24] (
std::atomic_shared_ptr
와std::atomic_weak_ptr
) - 확장된
future
[25] - 래치와 배리어[26]
- 네트워킹 확장[27], async, 기본적인 I/O 서비스, 타이머, 버퍼와 버퍼 기반 스트림, 소켓, 인터넷 프로토콜 등
- 범위(range)[28]
- 태스크 블록[29]
참조
[편집]각주
[편집]- ↑ “The next standard after C++17 will be C++20”., by Herb Sutter
- ↑ “Current Status : Standard C++”.
- ↑ “Working Draft, Standard for Programming Language C++” (PDF).
- ↑ “P0592R0: To boldly suggest an overall plan for C++20”.
- ↑ Herb Sutter. “Trip report: Summer ISO C++ standards meeting (Toronto)”.
- ↑ “P0606R0: Concepts Are Ready” (PDF).
- ↑ Tim Shen; Richard Smith. “Designated Initialization Wording”.
- ↑ Thomas Köppe. “Allow lambda capture [=, this]”.
- ↑ “Familiar template syntax for generic lambdas”.
- ↑ Herb Sutter. “Trip report: Fall ISO C++ standards meeting (Albuquerque)”.
- ↑ “Trip Report: C++ Standards Meeting in Albuquerque, November 2017”. 《There's Waldo!》 (미국 영어). 2017년 11월 20일. 2017년 12월 11일에 확인함.
- ↑ “Wording for lambdas in unevaluated contexts” (PDF).
- ↑ “Default constructible and assignable stateless lambdas” (PDF).
- ↑ “Pack expansion in lambda init-capture”. 《www.open-std.org》. 2017년 12월 11일에 확인함.
- ↑ “String literals as non-type template parameters” (PDF).
- ↑ “N4649: Working Draft, Technical Specification on C++ Extensions for Coroutines” (PDF).
- ↑ “Clang 5 Release Notes on coroutines”.
- ↑ “N4637: Working Draft, Extensions to C++ for Modules” (PDF).
- ↑ “Clang 5 documentation on Modules”.
- ↑ “C++ Modules in VS 2015 Update 1”.
- ↑ “N3341: Transactional Language Constructs for C++” (PDF).
- ↑ “Reflections on the reflection proposals - Meeting C++”. 《meetingcpp.com》 (영어). 2017년 6월 30일에 확인함.
- ↑ Herb Sutter. “Metaclasses” (PDF).
- ↑ “Atomic Smart Pointers”.
- ↑ “Functional in C++17 and C++20”.
- ↑ “P0342R0: Timing barriers”.
- ↑ “N4734: Working Draft, C++ Extensions for Networking” (PDF).
- ↑ “N4651: Working Draft, C++ Extensions for Ranges” (PDF).
- ↑ “Task Blocks”.