| C++ 언어 버전 |
|---|
| C++98 • C++03 • C++11 • C++14 • C++17 • C++20 • C++23 |
2018년 기준으로 C++17은 C++의 ISO/IEC 14882 표준 중 가장 최신 개정판이다.
C++ 표준 위원회가 표준 출시 주기를 3년으로 고정하기 전까지 C++17의 출시일은 불명확했다. 그 동안 C++17 개정판은 C++1z으로 불리기도 했었는데, 이는 C++11이 C++0x나 C++1x로 불렸었고 C++14이 C++1y로 불렸던 것과 같은 이치이다. C++17의 사양은 2017년 3월에 Draft International Standard (DIS)까지 도달했다. 이 DIS는 약간의 수정 요구만을 동반한 채 만장일치로 승인되었으며, 최종 표준이 2017년 12월에 출시되었다. C++ 표준 템플릿 라이브러리에는 약간의 추가 사항만 있다. <algorithm> 헤더의 몇몇 알고리즘들에 명시적 병렬화 기능이 생겼으며, 문법의 개선이 이루어졌다.
이번 C++ 개정판에는 몇몇 기능이 제거되기도 하였다.
std::auto_ptr, std::random_shuffle, 오래된 함수 어댑터 와 같이 사용 중단된 표준 라이브러리의 타입과 함수의 제거C++17는 많은 새 기능을 선보인다. 다음 목록은 완전하지 않을 수 있다.
static_assert에서 텍스트 메시지를 선택적으로 제공typename을 class 대신 사용가능auto 추론에 대한 새로운 규칙namespace X { namespace Y { … } } 대신 namespace X::Y { … } 사용 가능[[fallthrough]], [[maybe_unused]], [[nodiscard]]u8) 문자 리터럴 (UTF-8 문자열 리터럴은 C++11부터 있었으나, 문자 타입의 리터럴이 추가된 것임. 그러나 1바이트에 한정되어 ASCII만 저장할 수 있음.)if문 추가됨: if constexpr(expression)auto [a, b] = getTwoReturnValues();if와 switch문에서의 초기화T 타입(최고 레벨의 cv-qualifier을 무시한 채)의 prvalue 포현식을 이용한 T 타입의 복사 초기화 및 직접 초기화는 prvalue의 복사 생성자나 이동 생성자를 사용하지 않음. copy elision 참고std::pair<double, bool><double, bool="">(5.0, false)</double,> 대신에 std::pair(5.0, false) 사용 가능__has_include, 전처리기에 의해 헤더가 확인될 수 있게 해줌.register는 이전에 사용 중지 권고되었으며, 이제 사용되지 않음.__cplusplus의 값이 201703L로 변경됨std::uncaught_exceptions가 추가되어 예외 처리에서 std::uncaught_exception를 대체함boost::filesystem 기반의 파일 시스템 라이브러리