C++ 11, 14, 17, 20 이 무엇을 의미하나요? 도움이 되는 사이트들 링크
C++ 를 공부하다 보면, C++ 98, C++ 14, C++ 17, C++ 20등의단어들을 접하실 수 있는데, 이게 무슨 의미인지 정확히 모르시는 분이 있을 거 같아서 정리해 보려 합니다.
뒤에 붙은 숫자들은 표준화된 년도입니다. 뒤에 붙은 숫자를 더 정확히 표기하면,
C++98/03, C++11/14, C++17, C++20/23 으로도 표기할 수 있습니다.
아래에 관련하여 좀 더 자세한 정보들을 적어볼게요.
어려운 내용이 많으니 아.. 뭐 이렇구나 정도 하면서 살짝 읽어 보시면 될듯합니다.
C++98/03
1998년에 표준화되었고, 2003년도에 수정 적용된 내용,
C++ 최초의 표준화, 우리가 일반적으로 C++ 코딩이라고 말하면 여기에 대부분 표함 되어 있음
C++11/14
2011년 표준화되고, 2014년에 추가로 개선되어 발표 적용됨
이때부터가 모던 C++ 라고 불리게 되었습니다.
이 당시부터 표준모델 개선을 꾸준히 해야 한다는 논의가 생겼고, 이후로는 3년 주기로 업데이트하기로 하는데..
- 개발자에게는 부담되는 내용, 새로 배워야 할 것이 많아진다..
핵심 언어 부분의 추가, 표준라이브러리 확장, TR1 라이브러리의 수학적 특수 함수, 예외 부분이 대부분 흡수 통합됨
이전 표준에서 변화는?
안정성과 호환성 유지
표준 라이브러리를 이용한 새로운 기능의 추가
시스템이나 라이버러리 디자인에 유용하게 개선됨
성능 향상과 하드웨어 직접 조작능력 강화
C++17
이전 버전에서 C++ STL(표준 템플릿 라이 버리리)의 추가 수정, <algorithm> 해더의 몇몇 알고리즘에 명시적 병렬화 기능 문법적 개선이 이루어졌다.
제거된 기능
삼중자 관련 내용 링크 -> www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4210.pdf
std::auto_ptr, std::random_shuffle, 오래된 함수 어댑터와 같이 사용 중단된 표준 라이브러리의 타입과 함수의 제거
새로운 기능
static_assert에서 텍스트 메시지를 선택적으로 제공
템플릿 매개변수에서 typename을 class 대신 사용 가능
braced-init-list의 auto 추론에 대한 새로운 규칙
중첩된 네임스페이스의 정의. namespace X { namespace Y { … } } 대신 namespace X::Y { … } 사용 가능
네임스페이스와 열거형에 attribute 사용 가능
새로운 표준 attribute [[fallthrough]], [[maybe_unused]], [[nodiscard]]
UTF-8 인코딩의 (u8) 문자 리터럴
16진수 부동소수점 리터럴
모든 non-type 템플릿 인자에 대한 상수 평가
가변 템플릿을 위한 fold expressions
컴파일 타임 정적 if문 추가됨: if constexpr(expression)
구조적 바인딩 선언. auto [a, b] = getTwoReturnValues();
if와 switch문에서의 초기화
생성자의 템플릿 추론.
라이브러리 관련
-boost::filesystem 기반의 파일 시스템 라이브러리
-병렬 버전의 STL 알고리즘
C++20/23
앞으로 적용될 내용
새 기능 후보들
2017년 7월에 C++20의 초안에 포함되기로 건의된 항목
콘셉트
지정 생성자
람다 갈무리(capture)에 [=, this] 사용 가능
람다에서 템플릿 파라미터 리스트 사용
2017년 11월에 열린 가을 회의에서 C++20에 추가하기로 건의된 항목
우주선 연산자(operator <=>)를 이용한 세갈래 비교(Three-way comparison)
범위 기반 for문 안에서 추가 변수의 초기화
memcpy()보다 덜 장황하면서 컴파일러 내부를 활용할 수 있게 해주는 비트 단위 객체 복사(Bit-casting of object representations)
std::shared_ptr를 위한 std::atomic의 특수화 평가되지 않은 콘텍스트에서의 람다
생성과 할당이 가능하고 상태가 없는 기본 람다
람다 init-capture에서 pack expansion을 지원
템플릿 파라미터에서 문자열 리터럴 사용 가능
그 외 가능성이 있는 항목
코루틴 - Clang 5에서 시험적으로 지원함
모듈 - Clang 5와 비주얼스튜디오 2015 업데이트 1 에서 시험 적용
트랜잭셔널 메모리
리플렉션
메타클래스
라이브러리 변경 후보
어토믹 스마트 포인터 (std::atomic_shared_ptr와 std::atomic_weak_ptr)
확장된 future
래치와 배리어
네트워킹 확장, async, 기본적인 I/O 서비스, 타이머, 버퍼와 버퍼 기반 스트림, 소켓, 인터넷 프로토콜 등 범위
태스크 블록
참고하면 도움이 되는 사이트
1. cppreference
cppreference.com
Null-terminated strings: byte − multibyte − wide
en.cppreference.com
C++ 표준이 잘 정리되어 있는 사이트
앞으로 추가될 C++ 20 관련 내용들도 미리 준비되고 있다.
2. isocpp.org
Standard C++
isocpp.org
C++ 표준에 관련된 자료, 관련하에 초신 뉴스들 또한 접할 수 있다.
마무리. 개인 의견
지금도 C++ 는 주류 언어입니다. 하지만 과거의 화려함은 줄어든 듯합니다. 새로운 강자들의 등장이 많아서...
그리도 하드웨어 친화적이며 구조적이고 이미 널리 사용되고 있는 언어임은 분명합니다.
입문으로는 적절하다고 말하기 어렵지만, 배워두면 먹고살는데 확실히 도움이 됩니다.
'IT > C++(CPP)' 카테고리의 다른 글
CPP 초급 강좌 5. C++ Manipulator, Iomanipulator, 조정자 (0) | 2020.10.05 |
---|---|
CPP 초급 강좌 4. C++ 표준입출력 (4) | 2020.10.02 |
CPP 초급 강좌 3. C++ 해더 파일에 대해서 header files (0) | 2020.09.25 |
CPP 초급 강좌 2. std namespace / C++ (4) | 2020.09.23 |
CPP 초급 강좌 1. namespace 네임스페이스 개념, 사용법 / C++ (2) | 2020.09.22 |
댓글