본문 바로가기
IT/C++(CPP)

C++ 11, 14, 17, 20 이 무엇을 의미하나요? 도움이 되는 사이트들 링크

by 신림83 2020. 9. 21.
반응형

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++ 표준에 관련된 자료, 관련하에 초신 뉴스들 또한 접할 수 있다.

 

cpp update history

마무리. 개인 의견

 지금도 C++ 는 주류 언어입니다. 하지만 과거의 화려함은 줄어든 듯합니다. 새로운 강자들의 등장이 많아서...

 

그림 1. 2020년 6월 TIOBE 프로그래밍 언어 순위 (출처: https://www.tiobe.com/tiobe-index).

 그리도 하드웨어 친화적이며 구조적이고 이미 널리 사용되고 있는 언어임은 분명합니다.

 

입문으로는 적절하다고 말하기 어렵지만, 배워두면 먹고살는데 확실히 도움이 됩니다.

 

공부합시다..ㅠㅠ

반응형

댓글