C++17
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
C++17은 2017년 12월에 출시된 C++ 프로그래밍 언어의 표준 개정판이다. C++17은 C++11과 C++14에 이어 3년 주기로 릴리스되는 표준의 일환으로, 트라이그래프, 일부 더 이상 사용되지 않는 기능, `register` 키워드 등이 제거되었다. 새로운 기능으로는 언어적 측면에서 `static_assert` 개선, 템플릿 및 attribute 추가, UTF-8 문자 리터럴, 16진수 부동소수점 리터럴 지원 등이 있으며, 라이브러리 측면에서는 `
더 읽어볼만한 페이지
- 프로그래밍 언어 표준 - ISO/IEC JTC 1/SC 22
ISO/IEC JTC 1/SC 22는 프로그래밍 언어, 환경 및 시스템 소프트웨어 인터페이스 분야의 표준화를 담당하는 ISO/IEC JTC 1의 하위 위원회이며, 다양한 프로그래밍 언어와 시스템 소프트웨어 인터페이스의 표준화를 목표로 1985년에 설립되었다. - 프로그래밍 언어 표준 - C99
C99는 1999년 ISO/IEC 9899:1999로 출판된 C 프로그래밍 언어의 표준으로, 인라인 함수, 가변 길이 배열, `//` 주석 등 새로운 기능들을 추가하고 IEEE 부동소수점 자료 지원을 개선했으며 C90과 하위 호환성을 가지면서 C++와의 호환성을 고려했다. - C++ - 헤더 파일
헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다. - C++ - 소멸자 (컴퓨터 프로그래밍)
소멸자는 객체가 메모리에서 제거되기 직전에 호출되는 멤버 함수로, 객체 자원 해제 및 정리 작업을 수행하며, C++ 등 여러 언어에서 구현되고 메모리 누수 방지에 기여한다. - 프로그래밍 언어 - 다중 패러다임 프로그래밍 언어
다중 패러다임 프로그래밍 언어는 둘 이상의 프로그래밍 패러다임을 지원하며, 다양한 프로그래밍 스타일을 혼합하여 사용할 수 있도록 설계되었다. - 프로그래밍 언어 - 모조 (프로그래밍 언어)
모조는 모듈러사에서 개발한 파이썬과 유사한 구문의 고성능 프로그래밍 언어로, AI 애플리케이션 개발에 초점을 맞추고 러스트의 영향을 받은 메모리 안전성을 제공하며 향후 오픈 소스로 전환될 예정이다. 
| C++17 | |
|---|---|
| C++17 | |
| 표준 | ISO/IEC 14882:2017 | 
| 발표일 | 2017년 12월 15일 | 
| 이전 표준 | C++14 | 
| 후속 표준 | C++20 | 
| 다른 이름 | C++1z | 
2. 역사
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, 초안 국제 표준)까지 도달했다.[82][83] 이 DIS는 약간의 수정 요구만을 동반한 채 만장일치로 승인되었으며,[84] 최종 표준이 2017년 12월에 출시되었다.[85] C++ 표준 템플릿 라이브러리에는 약간의 추가 사항만 있는데, ` 
트라이그래프가 제거되었다.[44][45][89]  
C++17에는 다음과 같은 많은 새로운 기능이 도입되었다.
2. 1. 다음 표준
C++20[86][87][88]
3. 제거된 기능
std::auto_ptr, std::random_shuffle 및 이전 함수 어댑터를 포함하여 일부 더 이상 사용되지 않는 형식과 함수가 표준 라이브러리에서 제거되었다.[8][46][90][57][58] 이는 C++11에서 std::unique_ptr, std::shuffle, std::bind 및 람다와 같은 개선된 기능으로 대체되었다. 스토리지 클래스 지정자로  키워드를 사용하는 것이 제거되었다.[47][59] 이 키워드는 여전히 예약되어 있지만 현재는 사용되지 않는다.
4. 새로운 기능
4. 1. 언어
4. 2. 라이브러리
5. 컴파일러 지원
GCC 8은 완전하면서도 시험적으로 C++17을 지원한다.[115][116][48] Clang 5 이상 버전은 모든 C++17 기능을 지원한다.[117][49] Visual Studio 2017 15.7 (MSVC19.14)은 거의 전부를 지원하며,[118][119] 15.8(MSVC 19.15) 이상 버전은 모든 C++17 언어 기능을 지원한다.[50][51]
6. 라이브러리 지원
libstdc++는 버전 9.1부터 C++17에 대한 완전한 지원을 제공한다(병렬 처리 TS가 없고 C11 대신 C99를 참조하는 8.1).[52] libc++는 버전 9부터 C++17에 대한 부분적인 지원을 제공하며, 나머지는 "진행 중"이다.[53] Visual Studio 2017 15.8(MSVC 19.15) 표준 라이브러리 및 이후 버전은 "기본 문자열 변환"을 제외한 모든 C++17 라이브러리 기능을 지원하며 C11 대신 C99를 참조한다. "기본 문자열 변환"은 Visual Studio 2019 16.4에 추가되었다.[54]
참조
[1] 
웹사이트
 
N4661 Editors' Report -- Programming Languages -- C++
 
http://www.open-std.[...] 
2017-03-21
 
[2] 
웹사이트
 
ISO/IEC DIS 14882: Programming Languages — C++
 
http://www.open-std.[...] 
[3] 
웹사이트
 
C++17 is formally approved
 
https://herbsutter.c[...] 
2017-09-06
 
[4] 
웹사이트
 
ISO/IEC 14882:2017
 
https://www.iso.org/[...] 
2017-12-03
 
[5] 
웹사이트
 
N3928: Extending static_assert, v2 (Walter E. Brown)
 
http://www.open-std.[...] 
2015-04-03
 
[6] 
웹사이트
 
N4051: Allow typename in a template template parameter (Richard Smith)
 
http://www.open-std.[...] 
2015-04-03
 
[7] 
웹사이트
 
N3922: New Rules for auto deduction from braced-init-list (James Dennett)
 
http://www.open-std.[...] 
2014-11-28
 
[8] 
웹사이트
 
Updates to my trip report
 
http://isocpp.org/bl[...] 
2014-11-28
 
[9] 
웹사이트
 
N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)
 
http://www.open-std.[...] 
2014-11-28
 
[10] 
웹사이트
 
N4266: Attributes for namespaces and enumerators (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[11] 
웹사이트
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-09
 
[12] 
웹사이트
 
N4267: Adding u8 character literals (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[13] 
웹사이트
 
Hexadecimal floating literals for C++
 
http://wg21.link/p02[...] 
2017-07-16
 
[14] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[15] 
웹사이트
 
Declaring non-type template parameters with auto
 
http://www.open-std.[...] 
2016-06-23
 
[16] 
웹사이트
 
N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[17] 
웹사이트
 
N4295: Folding expressions (Andrew Sutton, Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[18] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[19] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[20] 
웹사이트
 
Selection statements with initializer
 
http://www.open-std.[...] 
2018-10-09
 
[21] 
웹사이트
 
Dynamic memory allocation for over-aligned data
 
http://www.open-std.[...] 
2017-03-13
 
[22] 
웹사이트
 
Class template argument deduction
 
https://en.cpprefere[...] 
2019-01-30
 
[23] 
웹사이트
 
CppCon 2018: Timur Doumler "Class template argument deduction in C++17"
 
https://www.youtube.[...] 
2019-01-30
 
[24] 
웹사이트
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-09
 
[25] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[26] 
웹사이트
 
P0012R1: Make exception specifications be part of the type system, version 5
 
http://www.open-std.[...] 
2018-12-17
 
[27] 
웹사이트
 
P0018R3: Lambda Capture of *this by Value as [=,*this], version 3
 
http://www.open-std.[...] 
2021-06-21
 
[28] 
웹사이트
 
Adopt Library Fundamentals V1 TS Components for C++17 (R1)
 
https://isocpp.org/f[...] 
2016-03-23
 
[29] 
웹사이트
 
Current Status
 
https://isocpp.org/s[...] 
[30] 
웹사이트
 
std::basic_string_view - cppreference.com
 
http://en.cppreferen[...] 
2016-06-23
 
[31] 
웹사이트
 
N4259: Wording for std::uncaught_exceptions (Herb Sutter)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[32] 
웹사이트
 
New core language papers adopted for C++17
 
https://isocpp.org/b[...] 
2014-11-15
 
[33] 
웹사이트
 
N4279: Improved insertion interface for unique-key maps (Thomas Köppe)
 
https://isocpp.org/f[...] 
2014-11-15
 
[34] 
웹사이트
 
New standard library papers adopted for C++17
 
https://isocpp.org/b[...] 
2014-11-15
 
[35] 
웹사이트
 
N4280: Non-member size() and more (Riccardo Marcangelo)
 
https://isocpp.org/f[...] 
2014-11-15
 
[36] 
웹사이트
 
N4284: Contiguous Iterators (Jens Maurer)
 
https://isocpp.org/f[...] 
2014-11-15
 
[37] 
웹사이트
 
Filesystem Library Proposal (Beman Dawes)
 
http://www.open-std.[...] 
2015-12-12
 
[38] 
웹사이트
 
The Parallelism TS Should be Standardized
 
https://isocpp.org/f[...] 
2016-03-23
 
[39] 
웹사이트
 
Mathematical Special Functions for C++17, v5
 
https://isocpp.org/f[...] 
2016-03-23
 
[40] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[41] 
웹사이트
 
A byte type definition
 
http://open-std.org/[...] 
2017-03-25
 
[42] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[43] 
웹사이트
 
PMR (Polymorphic Memory Resources) fully described -- Nico Josuttis
 
https://isocpp.org/b[...] 
2020-11-16
 
[44] 
웹사이트
 
N3981: Removing trigraphs??! (Richard Smith)
 
http://www.open-std.[...] 
Richard Smith
 
2015-04-03
 
[45] 
간행물
 
IBM comment on preparing for a Trigraph-adverse future in C++17
 
http://www.open-std.[...] 
IBM
 
2018-09-11
 
[46] 
웹사이트
 
N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)
 
http://www.open-std.[...] 
2014-11-28
 
[47] 
웹사이트
 
C++ Keywords: register
 
https://en.cpprefere[...] 
2018-09-03
 
[48] 
웹사이트
 
C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)
 
https://gcc.gnu.org/[...] 
2018-04-03
 
[49] 
웹사이트
 
Clang - C++17, C++14, C++11 and C++98 Status
 
https://clang.llvm.o[...] 
2018-06-26
 
[50] 
웹사이트
 
Visual C++ Language Conformance
 
https://docs.microso[...] 
2018-06-19
 
[51] 
웹사이트
 
Announcing: MSVC Conforms to the C++ Standard
 
https://blogs.msdn.m[...] 
null
 
2018-05-08
 
[52] 
웹사이트
 
Chapter 1. Status
 
https://gcc.gnu.org/[...] 
2018-06-19
 
[53] 
웹사이트
 
libc++ C++17 Status
 
http://libcxx.llvm.o[...] 
2019-05-24
 
[54] 
웹사이트
 
Announcing: MSVC Conforms to the C++ Standard
 
https://devblogs.mic[...] 
2019-05-24
 
[55] 
웹사이트
 
N3981: Removing trigraphs??! (Richard Smith)
 
http://www.open-std.[...] 
Richard Smith
 
2015-04-03
 
[56] 
문서
 
IBM comment on preparing for a Trigraph-adverse future in C++17
 
http://www.open-std.[...] 
IBM
 
[57] 
웹사이트
 
Updates to my trip report
 
http://isocpp.org/bl[...] 
2014-11-28
 
[58] 
웹사이트
 
N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)
 
http://www.open-std.[...] 
2014-11-28
 
[59] 
웹사이트
 
C++ Keywords: register
 
https://en.cpprefere[...] 
2018-09-03
 
[60] 
웹사이트
 
N3928: Extending static_assert, v2 (Walter E. Brown)
 
http://www.open-std.[...] 
2015-04-03
 
[61] 
웹사이트
 
N4051: Allow typename in a template template parameter (Richard Smith)
 
http://www.open-std.[...] 
2015-04-03
 
[62] 
웹사이트
 
N3922: New Rules for auto deduction from braced-init-list (James Dennett)
 
http://www.open-std.[...] 
2014-11-28
 
[63] 
웹사이트
 
N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)
 
http://www.open-std.[...] 
2014-11-28
 
[64] 
웹사이트
 
New core language papers adopted for C++17
 
https://isocpp.org/b[...] 
2014-11-15
 
[65] 
웹사이트
 
N4266: Attributes for namespaces and enumerators (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[66] 
웹사이트
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-09
 
[67] 
웹사이트
 
N4267: Adding u8 character literals (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[68] 
문서
 
UTF-8 文字列リテラルは [[C++11#新たな文字列リテラル|C++11]] から存在する。C++17 では一貫性確保のために対応する文字リテラルが追加されるが、その型はchar型であり、またUTF-8文字リテラルが扱えるコードポイントの範囲は、C0制御文字とラテン基本文字 (C0 Controls and Basic Latin Unicode block) すなわち [[ASCII]] に限定されている。なお、C++標準における従来の文字リテラルは、[[文字符号化方式]]がASCIIであることが保証されないため、UTF-8文字リテラルはASCIIを保証するという移植性の観点からも有用である。
 
[69] 
웹사이트
 
Hexadecimal floating literals for C++
 
http://wg21.link/p02[...] 
2017-07-16
 
[70] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-07-16
 
[71] 
웹사이트
 
N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[72] 
웹사이트
 
N4295: Folding expressions (Andrew Sutton, Richard Smith)
 
http://isocpp.org/fi[...] 
2014-11-15
 
[73] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[74] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[75] 
웹사이트
 
Selection statements with initializer
 
http://www.open-std.[...] 
2018-10-09
 
[76] 
웹사이트
 
Dynamic memory allocation for over-aligned data
 
http://www.open-std.[...] 
2017-03-14
 
[77] 
웹사이트
 
Class template argument deduction
 
https://en.cpprefere[...] 
2019-01-30
 
[78] 
웹사이트
 
CppCon 2018: Timur Doumler “Class template argument deduction in C++17”
 
https://www.youtube.[...] 
2019-01-30
 
[79] 
웹사이트
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-11
 
[80] 
웹사이트
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
2017-03-24
 
[81] 
웹사이트
 
P0012R1: Make exception specifications be part of the type system, version 5
 
http://www.open-std.[...] 
2018-12-17
 
[82] 
웹인용
 
N4661 Editors' Report -- Programming Languages -- C++
 
http://www.open-std.[...] 
2017-03-21
 
[83] 
웹인용
 
ISO/IEC DIS 14882: Programming Languages — C++
 
http://www.open-std.[...] 
[84] 
웹인용
 
C++17 is formally approved
 
https://herbsutter.c[...] 
[85] 
웹인용
 
ISO/IEC 14882:2017
 
https://www.iso.org/[...] 
[86] 
뉴스
 
the next standard after C++17 will be C++20
 
https://herbsutter.c[...] 
[87] 
웹인용
 
Current Status : Standard C++
 
https://isocpp.org/s[...] 
[88] 
웹인용
 
Trip Report: C++ Standards Meeting in Toronto, July 2017
 
https://botondballo.[...] 
2018-01-11
 
[89] 
간행물
 
IBM comment on preparing for a Trigraph-adverse future in C++17
 
http://www.open-std.[...] 
IBM paper N4210
 
2014-10-10
 
[90] 
웹인용
 
N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)
 
http://www.open-std.[...] 
[91] 
웹인용
 
N3928: Extending static_assert, v2 (Walter E. Brown)
 
http://www.open-std.[...] 
[92] 
웹인용
 
N4051: Allow typename in a template template parameter (Richard Smith)
 
http://www.open-std.[...] 
[93] 
웹인용
 
N3922: New Rules for auto deduction from braced-init-list (James Dennett)
 
http://www.open-std.[...] 
[94] 
웹인용
 
Updates to my trip report
 
http://isocpp.org/bl[...] 
[95] 
웹인용
 
N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)
 
http://www.open-std.[...] 
[96] 
웹인용
 
N4266: Attributes for namespaces and enumerators (Richard Smith)
 
http://isocpp.org/fi[...] 
[97] 
웹인용
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[98] 
웹인용
 
N4267: Adding u8 character literals (Richard Smith)
 
http://isocpp.org/fi[...] 
[99] 
웹인용
 
Hexadecimal floating literals for C++
 
http://wg21.link/p02[...] 
[100] 
웹인용
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[101] 
웹인용
 
N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)
 
http://isocpp.org/fi[...] 
[102] 
웹인용
 
N4295: Folding expressions (Andrew Sutton, Richard Smith)
 
http://isocpp.org/fi[...] 
[103] 
웹인용
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[104] 
웹인용
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[105] 
웹인용
 
If statement with initializer
 
http://www.open-std.[...] 
[106] 
웹인용
 
Dynamic memory allocation for over-aligned data
 
http://www.open-std.[...] 
[107] 
웹인용
 
N4640: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[108] 
웹인용
 
C++ Keywords: register
 
https://en.cpprefere[...] 
[109] 
웹인용
 
N4659: Working Draft, Standard for Programming Language C++
 
http://www.open-std.[...] 
[110] 
웹인용
 
N4259: Wording for std::uncaught_exceptions (Herb Sutter)
 
http://isocpp.org/fi[...] 
[111] 
웹인용
 
New core language papers adopted for C++17
 
https://isocpp.org/b[...] 
[112] 
웹인용
 
N4284: Contiguous Iterators (Jens Maurer)
 
https://isocpp.org/f[...] 
[113] 
웹인용
 
Filesystem Library Proposal (Beman Dawes)
 
http://www.open-std.[...] 
[114] 
웹인용
 
The Parallelism TS Should be Standardized
 
https://isocpp.org/f[...] 
[115] 
웹인용
 
C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)
 
https://gcc.gnu.org/[...] 
[116] 
웹인용
 
Chapter 1. Status
 
https://gcc.gnu.org/[...] 
[117] 
웹인용
 
Clang - C++17, C++14, C++11 and C++98 Status
 
https://clang.llvm.o[...] 
[118] 
웹인용
 
Visual C++ Language Conformance
 
https://docs.microso[...] 
[119] 
웹인용
 
Announcing: MSVC Conforms to the C++ Standard
 
https://blogs.msdn.m[...] 
                        
                        본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다. 
                        모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
                        하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다. 
                        따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
                        
                        문의하기 : help@durumis.com