# C++23: 차세대 C++ 표준

> Clean Markdown view of GeekNews topic #9774. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=9774](https://news.hada.io/topic?id=9774)
- GeekNews Markdown: [https://news.hada.io/topic/9774.md](https://news.hada.io/topic/9774.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2023-07-13T10:45:01+09:00
- Updated: 2023-07-13T10:45:01+09:00
- Original source: [modernescpp.com](http://modernescpp.com/index.php/c-23-the-next-c-standard)
- Points: 13
- Comments: 2

## Topic Body

- C++20을 잇는 차세대 C++ 표준   
- C++98, C++11, C++20 같은 게임 체인저는 아니고, C++17 수준의 작은 변화   
### (40년간의) C++표준 변화 알아보기   
#### C++98  
- 80년대 말에 Bjarne Stroustrup 과 Margaret A. Ellis가 유명한  Annotated C++ Reference Manual (ARM) 책을 저술   
- 이 책의 목적은 두가지  
  - 너무 많은 C++ 독립 구현체들이 있었기 때문에 ARM은 C++의 기능을 정의   
  - C++ 표준인 C++98 (ISO/IEC 14882)의 기초가 됨   
- C++98은 몇몇 중요한 기능들을 포함  
  - Templates  
  - STL(Standard Template Library) : 컨테이너, 알고리듬, 스트링, IO Stream들을 포함  
#### C++03  
- C++03 (14882:2003) 에서는 아주 작은 기술 수정이 이뤄짐  
- 커뮤니티에서는 C++98 을 포함한 C++03을 "레거시 C++" 이라고 부름   
#### TR1   
- 2005년에 재미난 일이 생김. TR1(Technical Report 1)이 발간   
- TR1 은 C++11 을 위한 큰 발걸음이자 Modern C++로 향하는 첫걸음   
- C++ 표준 위원회 멤버들의 [Boost 프로젝트](https://www.boost.org/)에 기반   
- 차세대 C++ 표준에 들어갈 13개의 라이브러리를 포함 (정규식, 난수, `std::shard_ptr` 같은 스마트 포인터, 해쉬테이블등)  
#### C++11  
- 다음 C++ 표준이었지만, 우린 Modern C++ 이라고 부름. 이 이름엔 C++14 와 C++17 을 포함  
- C++11 은 C++ 을 개발하는 방식을 완전히 바꿔버림   
  - TR1의 컴포넌트 뿐만 아니라 move-semantic, perfect forwarding, variadic templates, constexpr 등을 가져옴   
  - 스레딩 기반의 메모리 모델과 Threading API 가 포함   
#### C++14  
- 작은 C++ 표준. read-writer locks, generalized 된  lambdas 와 constexpr 함수 도입   
#### C++17   
- 크지도 작지도 않음  
- 2개의 뛰어난 기능을 포함 : Parallel STL 과 표준화된 파일시스템   
  - 약 80개의 STL 알고리듬이 실행 정책을 통해 실행 가능 (병렬, 순차, 벡터)  
- Boost 에서 많이 영향을 받음. 파일 시스템과 3개의 데이터 타입(std::optional, std::variant, std::any)  
#### C++20   
- C++20은 C++11과 마찬가지로 우리가 C++ 프로그래밍하는 것을 바꿔 버림   
- 특히 큰 4가지   
  - Ranges : Ranges 라이브러리를 이용하면, 컨테이너에서 직접 알고리듬을 표한하고 파이프 기호로 알고리듬을 조합하여 무한 데이터 스트림에 적용 가능   
  - Coroutines: C++에서 비동기 프로그래밍이 주류가 되게 해줌. 협동작업, 이벤트 루프, 무한 데이터 스트림 및 파이프라인의 기반이 됨   
  - Concepts: 템플릿을 생각하고 프로그래밍 하는 방식을 바꿈. 템플릿 인자에 대해서 제약을 걸거나 타입 검사등을 할 수 있게 해주고, 컴파일시에 확인가능  
  - Modules: 헤더 파일의 한계를 넘게 해줌. 다양한 것을 약속해줌. 예를 들어 전처리기가 필요없어지고, 궁극적으로 빌드 시간이 단축되고 패키지를 더 쉽게 빌드 할수 있게 됨   
#### C++23   
- 2023년 7월 현재 C++23이 최종 투표를 앞두고 있음   
- 작지만 언어 자체에 매우 영향력 있는 기능인 "Deducing this"를 추가   
  - 파이썬과 비슷하게, 멤버함수에 implicit하게 전달된 this 포인터를 explicit 할 수 있음   
  - 이를 통해서 복잡한 테크닉인 CRTP(Curiously Recurring Template Pattern), 또는 Overload 패턴 구현이 간단해짐   
- C++23 라이브러에도 중요한 추가들이 있음   
  - import std; 로 스탠다드 라이브러리를 직접 임포트 하거나, std:print 및 std:println 에서 C++20 포맷 스트링을 적용 가능   
  - 성능상 std::map 을 대체하는 std::flat_map   
  - std::optional 인터페이스가 Composability를 위해 Monadic 인터페이스로 확장됨   
  - 새로운 데이터타입인 std::expected   
  - 다차원 span 인 std::mdspan   
  - 숫자들의 스트림을 생성하기 위한 코루틴인 std::generator

## Comments



### Comment 17280

- Author: carnoxen
- Created: 2023-07-13T12:10:22+09:00
- Points: 1

아직 네트워킹 표준 소식은 없나 보네요

### Comment 17500

- Author: penza1
- Created: 2023-07-20T19:16:25+09:00
- Points: 1
- Parent comment: 17280
- Depth: 1

다음표준에도;; 불확실하지않을까 싶습니다
