C++17

C++17, C++ programlama dili için yayınlanan ISO/IEC 14882 standardının bir versiyonudur. C++17, bir önceki C++ standardı olan C++14'ün yerine geçmiş, sonrasında C++20 ile yerdeğiştirmiştir.

Tarihi

C++ Standard Komitesi yayın döngüsünü 3 senelik periyotlara sabitlemeden önce, C++17'nin yayın tarihinin ne olacağı belli değildi. O dönem, C++11 için C++0x veya C++1x, C++14 için C++1y denilmesi gibi, C++17 için de C++1z denilmiştir. C++17 spesifikasyonu Mart 2017'de Uluslararası Standard Taslağı (İngilizce: Draft International Standard (DIS)) aşamasına getirildi. Bu taslak oy birliği ile onaylanmış ve tamamlanan standard Aralık 2017'de basılmıştır. C++ Standard Kütüphanesi'nde az sayıda değişiklik yapılmıştır, bunlar arasında <algorithm> başlığındaki bazı algoritmalara doğrudan (explicit) parallellik desteği ve sözdizim geliştirmeleri gösterilebilir.

Yeni özellikler

C++17 ile pek çok yeni özellik tanıtılmıştır. Tam olmayan bir liste aşağıda görülebilir.

Dil

Kütüphane

Kaldırılan özellikler

C++'ın bu revizyonunda yalnızca yeni özellikler eklenmemiş, aynı zamanda bazı kaldırılanlar da olmuştur.

Derleyici desteği

Kaynakça

  1. ↑ "N4661 Editors' Report -- Programming Languages -- C++". 21 Mart 2017. 4 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 21 Mart 2017.
  2. ↑ "ISO/IEC DIS 14882: Programming Languages — C++" (PDF). 25 Mart 2017 tarihinde kaynağından (PDF) arşivlendi.
  3. ↑ Herb Sutter (6 Eylül 2017). "C++17 is formally approved". 29 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Eylül 2017.
  4. ↑ "ISO/IEC 14882:2017". 29 Ocak 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Aralık 2017.
  5. ↑ "N3928: Extending static_assert, v2 (Walter E. Brown)" (PDF). 11 Ağustos 2015 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 3 Nisan 2015.
  6. ↑ "N4051: Allow typename in a template template parameter (Richard Smith)". 11 Ağustos 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Nisan 2015.
  7. ↑ "N3922: New Rules for auto deduction from braced-init-list (James Dennett)". 10 Ağustos 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Kasım 2014.
  8. 1 2 3 "Updates to my trip report". 19 Mart 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Kasım 2014.
  9. ↑ "N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)". 3 Ağustos 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Kasım 2014.
  10. 1 2 3 4 5 "New core language papers adopted for C++17". 27 Nisan 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  11. ↑ "N4266: Attributes for namespaces and enumerators (Richard Smith)". 6 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  12. ↑ "N4640: Working Draft, Standard for Programming Language C++" (PDF). ss. 193-195. 12 Mart 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 9 Mart 2017.
  13. ↑ "N4267: Adding u8 character literals (Richard Smith)". 28 Ekim 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  14. ↑ Thomas Köppe. "Hexadecimal floating literals for C++". 21 Eylül 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Temmuz 2017.
  15. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §5.13.4. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  16. ↑ James Touton; Mike Spertus (23 Haziran 2016). "Declaring non-type template parameters with auto". 16 Eylül 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Kasım 2020.
  17. ↑ "N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)". 12 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  18. ↑ "N4295: Folding expressions (Andrew Sutton, Richard Smith)". 4 Nisan 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  19. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §9.4.1. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  20. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §11.5. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  21. ↑ "Selection statements with initializer". 6 Ekim 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Ekim 2018.
  22. ↑ "Dynamic memory allocation for over-aligned data". 8 Eylül 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Mart 2017.
  23. ↑ "Class template argument deduction". 31 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Ocak 2019.
  24. ↑ "CppCon 2018: Timur Doumler "Class template argument deduction in C++17"". YouTube. 21 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Ocak 2019.
  25. ↑ "N4640: Working Draft, Standard for Programming Language C++" (PDF). ss. 431-433. 12 Mart 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 9 Mart 2017.
  26. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §19.8. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  27. ↑ "P0012R1: Make exception specifications be part of the type system, version 5". 12 Eylül 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Aralık 2018.
  28. ↑ "P0018R3: Lambda Capture of *this by Value as [=,*this], version 3". 22 Ağustos 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 21 Haziran 2021.
  29. ↑ "Adopt Library Fundamentals V1 TS Components for C++17 (R1)". 5 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Mart 2016.
  30. ↑ "Current Status". 8 Eylül 2020 tarihinde kaynağından arşivlendi.
  31. ↑ "std::basic_string_view - cppreference.com". en.cppreference.com. 17 Haziran 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Haziran 2016.
  32. ↑ "N4259: Wording for std::uncaught_exceptions (Herb Sutter)" (PDF). 29 Kasım 2014 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 15 Kasım 2014.
  33. ↑ "N4279: Improved insertion interface for unique-key maps (Thomas Köppe)". 27 Nisan 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  34. 1 2 "New standard library papers adopted for C++17". 29 Kasım 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  35. ↑ "N4284: Contiguous Iterators (Jens Maurer)". 29 Kasım 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2014.
  36. ↑ "Filesystem Library Proposal (Beman Dawes)". 20 Temmuz 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Aralık 2015.
  37. ↑ "The Parallelism TS Should be Standardized". 5 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Mart 2016.
  38. ↑ "Mathematical Special Functions for C++17, v5" (PDF). 5 Nisan 2016 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 23 Mart 2016.
  39. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §23.7. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  40. ↑ "A byte type definition" (PDF). 25 Mart 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 25 Mart 2017.
  41. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §23.15.8. 7 Aralık 2017 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2017.
  42. ↑ "PMR (Polymorphic Memory Resources) fully described -- Nico Josuttis". 28 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Kasım 2020.
  43. ↑ "N3981: Removing trigraphs??! (Richard Smith)". 6 Mayıs 2014. 9 Temmuz 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Nisan 2015.
  44. ↑ IBM comment on preparing for a Trigraph-adverse future in C++17 11 Eylül 2018 tarihinde Wayback Machine sitesinde arşivlendi., IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
  45. ↑ "N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)". 20 Ekim 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Kasım 2014.
  46. ↑ "C++ Keywords: register". 3 Eylül 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Eylül 2018.
  47. ↑ "C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. 4 Nisan 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Nisan 2018.
  48. ↑ "Clang - C++17, C++14, C++11 and C++98 Status". clang.llvm.org. 4 Temmuz 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Haziran 2018.
  49. ↑ corob-msft. "Visual C++ Language Conformance". docs.microsoft.com. 19 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Haziran 2018.
  50. ↑ "Announcing: MSVC Conforms to the C++ Standard". 7 Mayıs 2018. 26 Ağustos 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2018.