close
İçeriğe atla

C++20

Vikipedi, özgür ansiklopedi

C++20, C++17'den sonra C++ programlama dili için ISO/IEC standardının revizyonunun adıdır.[1] Bu standart[2] Şubat 2020'de Prag'daki toplantıda WG21 tarafından sonuçlandırıldı.[3] Taslak 4 Eylül 2020 tarihinde onaylandıktan sonra C++20 standardı şu anda son çalışmalardan geçiyor.[4][5]

C++20, C++17 ve C++14'ten daha fazla sayıda yeni ve büyük özellikler ekledi.[6] C++20'ye dahil ve kabul edilen değişikliklerin listesinin bir kısmı aşağıda listelenmiştir.[7]

Yeni özellikler

[değiştir | kaynağı değiştir]

C++20 ile birçok yeni özellik tanıtıldı. Aşağıdaki liste tamamlanmamış olabilir.

  • kısa sözdizimi ile,[8] konseptler[9]
  • modüller[10]
  • belirlenmiş ilklendiriciler[11] (C99 özelliğine ve yaygın G ++ uzantısına dayanarak)
  • lambda yakalama olarak[=, this][12]
  • lambdalardaki şablon parametre listeleri[13]
  • "uzay gemisi operatörü" (<=>) kullanarak üç yönlü karşılaştırma
  • aralık tabanlı bir for ifadesi içerisinde ek bir değişkenin ilklendirilmesi[14]
  • değerlendirilmemiş bağlamlarda lambdalar[15][16]
  • varsayılan yapılandırılabilir ve atanabilir durumsuz lambdalar[17]
  • şablon parametreleri olarak dize değişmezleri[18]
  • belirli durumlardatypename ihtiyacı kaldırıldı[19]
  • yeni standart özellikler[[no_unique_address]],[20][[likely]] ve [[unlikely]][21]
  • koşullu explicit, belirtik değiştiricinin bir bool ifadesine bağlı olmasına izin verir[22]
  • genişletilmiş constexpr: virtual fonksiyonlar[23], union[24], try-catch,[25] dynamic_cast ve typeid[26], std::pointer_traits[27]
  • yeni consteval anahtar sözcüğünü kullanan dolaysız fonksiyonlar[28]
  • işaretli tam sayılar artık ikinin tümleyeni kullanılarak gösterilmek üzere tanımlanmaktadır (işaretli tam sayı taşması tanımsız davranış olarak kalır)[29]
  • revize edilmiş bir bellek modeli[30]
  • yapısal bağlamalarda çeşitli iyileştirmeler (lambda yakalamalarıyla etkileşim, static ve thread_local depolama süresi)[31][32]
  • Eş programlar[33]
  • kapsamlı enumlardausing[34]
  • constinit anahtar sözcüğü[35]
  • aralıklar (The One Ranges Proposal)[36]
  • Diziler için std::make_shared ve std::allocate_shared[37]
  • atomik akıllı işaretçiler (std::atomic<shared_ptr<T>> ve std::atomic<weak_ptr<T>> )[38]
  • bir işaretçiyi ham işaretçiye dönüştürmek için std::to_address[39]
  • <chrono>'ya takvim ve saat dilimi eklemeleri[40]
  • std::span, bitişik bir diziye bir görünüm sağlar[41]
  • <version>başlığı[42]
  • memcpy() 'den daha az ayrıntı ve derleyici dahili öğelerinden daha fazla yararlanma yeteneği ile nesne gösterimlerinin tür dökümleri için std::bit_cast<>[43]
  • özellik test makroları[44]
  • çeşitli constexpr kitaplık bitleri[45]
  • varsayılan ilklendirme ile akıllı işaretçi oluşturma[46]
  • std::map::contains methodu[47]
  • Bit işlemler,[48] ve log2 işlemleri[49][50][51]

Kullanımdan kaldırma

[değiştir | kaynağı değiştir]
  • Altsimge ifadelerinde virgül operatörü kullanımı kullanımdan kaldırıldı[52]
  • (çoğu) volatile kullanımdan kaldırıldı[53]

Yeni (ve değiştirilmiş) anahtar kelimeler

[değiştir | kaynağı değiştir]

concept, constinit,[54] consteval, co_await, co_return, co_yield, requires, export ve char8_t.gibi birçok yeni anahtar kelime (ve yeni "uzay gemisi operatörü" (<=>)) eklendi.[55] Ek olarak explicit, C++20'den itibaren ifade alabilecek.[56]

Anahtar kelimelere ek olarak, yeni import ve module dahil olmak üzere özel anlamı olan tanımlayıcılar da var.

C++20'deki yeni nitelikler: [[likely]], [[unlikely]] ve [[no_unique_address]][57]

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. "The Standard". isocpp.org. 19 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Eylül 2020.
  2. "P1000R3: C++ IS schedule" (PDF). 1 Ekim 2019. 14 Kasım 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Şubat 2020.
  3. "N4817: 2020 Prague Meeting Invitation and Information" (PDF). 6 Kasım 2019. 29 Aralık 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Şubat 2020.
  4. "Current Status". isocpp.org. 8 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Eylül 2020.
  5. "C++20 Approved -- Herb Sutter". isocpp.org. 11 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Eylül 2020.
  6. "Why does the C++ standard ship every three years?". 13 Temmuz 2019 tarihinde kaynağından arşivlendi.
  7. "P0592R0: To boldly suggest an overall plan for C++20". 8 Mart 2017 tarihinde kaynağından arşivlendi.
  8. "P1141R1 - Yet another approach for constrained declarations". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
  9. "P0606R0: Concepts Are Ready" (PDF). 28 Mart 2017 tarihinde kaynağından (PDF) arşivlendi.
  10. "N4720: Working Draft, Extensions to C++ for Modules" (PDF). 30 Nisan 2019 tarihinde kaynağından (PDF) arşivlendi.
  11. "Designated Initialization Wording". 15 Ekim 2017 tarihinde kaynağından arşivlendi.
  12. "Allow lambda capture [=, this]". 9 Şubat 2019 tarihinde kaynağından arşivlendi.
  13. "Familiar template syntax for generic lambdas". 21 Kasım 2018 tarihinde kaynağından arşivlendi.
  14. "Range-based for statements with initializer". 6 Nisan 2017 tarihinde kaynağından arşivlendi.
  15. "Trip Report: C++ Standards Meeting in Albuquerque, November 2017". There's Waldo! (İngilizce). 20 Kasım 2017. 11 Aralık 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Aralık 2017.
  16. "Wording for lambdas in unevaluated contexts" (PDF). 12 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
  17. "Default constructible and assignable stateless lambdas" (PDF). 12 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
  18. "String literals as non-type template parameters" (PDF). 11 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
  19. "Down with typename!". 22 Nisan 2018 tarihinde kaynağından arşivlendi.
  20. "Language support for empty objects". 17 Nisan 2018 tarihinde kaynağından arşivlendi.
  21. "Proposed wording for likely and unlikely attributes (Revision 5)". 13 Mayıs 2018 tarihinde kaynağından arşivlendi.
  22. "explicit(bool)". www.open-std.org. 20 Temmuz 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Kasım 2018.
  23. "Allowing Virtual Function Calls in Constant Expressions". www.open-std.org. 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Mart 2019.
  24. "P1330R0 - Changing the active member of a union inside constexpr". 26 Temmuz 2019 tarihinde kaynağından arşivlendi.
  25. "P1002R0 - Try-catch blocks in constexpr functions" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
  26. "P1327R0 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions". 26 Temmuz 2019 tarihinde kaynağından arşivlendi.
  27. "P1006R1 - Constexpr in std::pointer_traits" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
  28. "P1073R2 - Immediate functions". 26 Ekim 2018 tarihinde kaynağından arşivlendi.
  29. "P1236R0: Alternative Wording for P0907R4 Signed Integers are Two's Complement". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
  30. "P0668R4: Revising the C++ memory model". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
  31. "P1091R1: Extending structured bindings to be more like variable declarations". www.open-std.org. 26 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2019.
  32. "P1091R2: Extending structured bindings to be more like variable declarations". www.open-std.org. 26 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2019.
  33. "N4649: Working Draft, Technical Specification on C++ Extensions for Coroutines" (PDF). 16 Mayıs 2017 tarihinde kaynağından (PDF) arşivlendi.
  34. "P1099R5: Using Enum". www.open-std.org. 20 Temmuz 2019. 20 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  35. "P1143R2: Adding the constinit keyword". www.open-std.org. 20 Temmuz 2019. 20 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  36. "P0896R3" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
  37. "Extending make_shared to Support Arrays". 6 Eylül 2017 tarihinde kaynağından arşivlendi.
  38. "Revising atomic_shared_ptr for C++20". JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP. ISO. 4 Ocak 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Aralık 2018.
  39. "Utility to convert a pointer to a raw pointer". 20 Şubat 2018 tarihinde kaynağından arşivlendi.
  40. "Extending <chrono> to Calendars and Time Zones". 13 Mayıs 2018 tarihinde kaynağından arşivlendi.
  41. "span: bounds-safe views for sequences of objects". 18 Mayıs 2019 tarihinde kaynağından arşivlendi.
  42. "<version>". 18 Mayıs 2019 tarihinde kaynağından arşivlendi.
  43. "Bit-casting object representations". www.open-std.org. 18 Ağustos 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2018.
  44. "Integrating feature-test macros into the C++ WD". www.open-std.org. 20 Temmuz 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2018.
  45. "P1032R1 - Misc constexpr bits". 26 Ekim 2018 tarihinde kaynağından arşivlendi.
  46. "Smart pointer creation with default initialization". 26 Ocak 2019 tarihinde kaynağından arşivlendi.
  47. "std::map::contains - cppreference.com". en.cppreference.com. 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Mayıs 2020.
  48. "P0553R4: Bit operations". www.open-std.org. 20 Temmuz 2019. 20 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  49. "P0556R3: Integral power-of-2 operations". www.open-std.org. 6 Haziran 2018. 26 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Ağustos 2020.
  50. "P1355R2 Exposing a narrow contract for ceil2". www.open-std.org. 11 Haziran 2019. 5 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Ağustos 2020.
  51. "On the names of low-level bit manipulation functions" (PDF). www.open-std.org. 11 Şubat 2020. 24 Mart 2020 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 8 Ağustos 2020.
  52. "P1161R2: Deprecate uses of the comma operator in subscripting expressions". www.open-std.org. 20 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  53. "P1152R4: Deprecating volatile". www.open-std.org. 20 Temmuz 2019. 23 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  54. "P1143R2: Adding the constinit keyword". www.open-std.org. 20 Temmuz 2019. 20 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
  55. "C++ keywords - cppreference.com". en.cppreference.com. 19 Mart 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2019.
  56. "explicit specifier - cppreference.com". en.cppreference.com. 21 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2019.
  57. "attribute specifier sequence(since C++11) - cppreference.com". en.cppreference.com. 5 Temmuz 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2019.

Dış bağlantılar

[değiştir | kaynağı değiştir]