İçeriğe atla

C++20

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

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

Dil

  • 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]

Kütüphane

  • 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

  • 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

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

Kaynaklar

  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

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

Programlama dillerinde işaretçi, bellek adresi tutmak için tasarlanmış bir türdür.

İlk olarak HP tarafından geliştirilmeye başlanan, daha sonra C++ standardına dahil edilen generic programlama modeliyle geliştirilmiş kütüphanedir. Daha çok STL şeklinde kısa ismiyle anılır.

<span class="mw-page-title-main">Gebze Teknik Üniversitesi</span> Kocaelide kurulu devlet üniversitesi

Gebze Teknik Üniversitesi veya kısaca GTÜ, 3 Temmuz 1992 tarihinde Gebze Yüksek Teknoloji Enstitüsü adıyla kurulan, Türkiye'deki iki yüksek teknoloji enstitüsünden birisiydi. 22 Ekim 2014 tarihinde TBMM tarafından kabul edilen yasa teklifiyle Gebze Teknik Üniversitesi olarak yeniden yapılandırılmasına karar verildi. Üniversite Çayırova yerleşkesinden oluşmaktadır. Üniversite günümüzde 1.370.070 m2 toplam açık alanı ve 26.612 m2 toplam kapalı alanı bulunan Çayırova Kampüsü'nden oluşmaktadır.

<span class="mw-page-title-main">1. Lig</span> Türkiyenin ikinci seviye futbol ligi

1. Lig ya da sponsorluk anlaşması gereği Trendyol 1. Lig, Türkiye'deki ikinci seviye futbol ligi.

<span class="mw-page-title-main">LibreOffice Draw</span>

LibreOffice Draw, özgür ve ücretsiz LibreOffice yazılım ailesinin vektörel çizim ve şema oluşturma uygulaması. Yerel dosya biçimi olarak bir ISO/IEC standardı olan OpenDocument Format (ODF) biçimlerinden .odt biçimini kullanır. Microsoft Visio'nun yerel dosya biçimlerindeki (.vsd) dosyalarını içeri aktarabilir.

Kriptolojide, Curve25519 256-bit anahtar boyutu için 128-bit güvenlik sağlayan ve eliptik eğri Diffie–Hellman (ECDH) anahtar değişim protokolu ile kullanılması için tasarlanan bir eliptik eğridir. ECC eğrileri içinde en hızlılarından biridir ve bilinen herhangi bir patent kapsamında değildir.

Android üzerinde çalışan özgür yazılım ve Açık kaynak önemli uygulamaların kısa bir listesidir.

<span class="mw-page-title-main">TensorFlow</span>

TensorFlow, makine öğrenimi için ücretsiz ve açık kaynaklı bir yazılım kütüphanesidir. Bir dizi görevde kullanılabilir, ancak derin sinir ağlarının eğitimi ve çıkarımına özel olarak odaklanmaktadır.

<span class="mw-page-title-main">Signal (yazılım)</span> Şifreli iletişim uygulaması

Signal, özgür ve açık kaynaklı, çapraz platform şifreli mesajlaşma yazılımı. Signal Vakfı ve Signal Messenger LLC tarafından geliştirmektedir. İnternet üzerinden dosyaları, sesli mesajları, görselleri ve videoları içerebilen kişiler arası mesajları veya grup mesajlarını göndermek için kullanılır. Ayrıca bire bir sesli ve görüntülü arama yapabilir, Android sürümü SMS uygulaması olarak da işlev görebilir.

<span class="mw-page-title-main">RocksDB</span>

RocksDB, anahtar / değer verileri için yüksek performanslı yerleşik bir veritabanıdır. Çoklu merkezi işlem birimi (CPU) çekirdeğinden yararlanmak ve giriş / çıkış bağlı iş yükleri için katı hal sürücüleri (SSD) gibi hızlı depolamayı verimli bir şekilde kullanmak üzere optimize edilmiş, Google tarafından geliştirilen LevelDB'nin bir çatalıdır. Günlük yapılı birleştirme ağacı veri yapısına dayanır.

<span class="mw-page-title-main">İNaturalist</span>

iNaturalist, bir biyoloji çeşitliliği gözlemini haritalama ve paylaşma konsepti üzerine inşa edilmiş doğa bilimcileri, vatandaş bilim adamları ve biyologların çevrimiçi sosyal ağıdır. iNaturalist'e web sitesi üzerinden veya mobil uygulamalarından erişilebilir. İNaturalist ile kaydedilen gözlemler bilimsel araştırma projelerine, koruma kuruluşlarına, diğer kuruluşlara ve halka değerli veriler sunmaktadır. Proje "doğal tarih mobil uygulamaları için standart taşıyıcı" olarak adlandırıldı.

<span class="mw-page-title-main">WorldCat</span> 17.900 kütüphanenin arşivini listeleyen toplu katalog

WorldCat, OCLC küresel kooperatifine katılım sağlayan 123 ülke ve bölgeden 17.900 kütüphanenin arşivini listeleyen bir toplu katalogdur. OCLC, Inc. tarafından işletilmektedir. Dünyanın en büyük bibliyografik veritabanıdır ve üye olan kütüphaneler toplu olarak bu veritabanının bakımını üstlenmektedir.

C17, ISO/IEC 9899: 2018 için kullanılan gayriresmî addır. 2017'de geliştirilmesi devam ettiği ve resmi olarak Haziran 2018'de basıldığı için C18 olarak da bilinir. C programlama dilinin yayınlanan en son resmi standardıdır. C11'in yerini almıştır ve yerine C2y'in gelmesi beklenmektedir.

Atletizmde Dominika rekorları, Dominika Amatör Atletizm Derneği tarafından denetlenmektedir.

<span class="mw-page-title-main">James P. Allison</span>

James Patrick Allison, Teksas Üniversitesi MD Anderson Kanser Merkezi'nde immünoloji profesörü ve başkanı ve immünoterapi platformunun yönetici direktörü olan Amerikalı bir immünolog ve Nobel ödüllü bilim insanıdır.

Bu liste halterdeki dünya rekorlarıdır. Rekorlar her sıklette; koparma, silkme ve toplam olarak kaydedilir

C++ Standard Kütüphanesi, C++ programlama dilinde ve C++ ISO Standard'ıyla yazılmış sınıfların ve fonksiyonların koleksiyonudur.

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.

C23, C programlama dilinin açık standard taslağıdır ve ISO/IEC 9899:2024 olarak yayınlanması ve C17'nin yerini alması beklenmektedir. 2016'da gayriresmi olarak C2x ve adıyla üzerinde çalışılmaya başlanmıştır ve Ekim 2024'te yayınlanması beklenmektedir. C23'ün en son taslağı 1 Nisan 2023'te yayınlanmıştır ve genel erişime açıktır. WG14 C2x taslağı için ilk olarak Ekim 2019 toplanmış, 2020'te COVID-19 pandemisi nedeniyle toplantılar sanal olarak uzaktan yapılmış, sonrasında telekonferans toplantıları 2024 boyunca devam etmiştir. Haziran 2024'teki açık standardta 'C23'ün bitiminden sonra, "C2y" olarak adlandırıldığı' belirtilmiştir.