C++20

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

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

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

### Dil

* kısa sözdizimi ile, konseptler 
* modüller
* belirlenmiş ilklendiriciler (C99 özelliğine ve yaygın G ++ uzantısına dayanarak)
* lambda yakalama olarak`[=, this]`
* lambdalardaki şablon parametre listeleri
* "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
* değerlendirilmemiş bağlamlarda lambdalar
* varsayılan yapılandırılabilir ve atanabilir durumsuz lambdalar
* şablon parametreleri olarak dize değişmezleri
* belirli durumlarda`typename` ihtiyacı kaldırıldı
* yeni standart özellikler`,``` ve ``
* koşullu `explicit,` belirtik değiştiricinin bir bool ifadesine bağlı olmasına izin verir
* genişletilmiş `constexpr`: `virtual` fonksiyonlar, `union`, `try-catch`, `dynamic_cast` ve `typeid`, `std::pointer_traits`
* yeni `consteval` anahtar sözcüğünü kullanan dolaysız fonksiyonlar
* 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)
* revize edilmiş bir bellek modeli
* yapısal bağlamalarda çeşitli iyileştirmeler (lambda yakalamalarıyla etkileşim, static ve thread_local depolama süresi)
* Eş programlar
* kapsamlı enumlarda`using`
* `constinit` anahtar sözcüğü

### Kütüphane

* aralıklar (The One Ranges Proposal)  
* Diziler için `std::make_shared` ve `std::allocate_shared`
* atomik akıllı işaretçiler (`std::atomic<shared_ptr<T>>` ve `std::atomic<weak_ptr<T>>` )
* bir işaretçiyi ham işaretçiye dönüştürmek için `std::to_address`
* `<chrono>`'ya takvim ve saat dilimi eklemeleri
* `std::span`, bitişik bir diziye bir görünüm sağlar
* `<version>`başlığı
* `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<>`
* özellik test makroları
* çeşitli constexpr kitaplık bitleri
* varsayılan ilklendirme ile akıllı işaretçi oluşturma
* `std::map::contains` methodu 
* Bit işlemler, ve log2 işlemleri

### Kullanımdan kaldırma

* Altsimge ifadelerinde virgül operatörü kullanımı kullanımdan kaldırıldı
* (çoğu) `volatile` kullanımdan kaldırıldı

### Yeni (ve değiştirilmiş) anahtar kelimeler
`concept`, `constinit`, `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. Ek olarak `explicit`, C++20'den itibaren ifade alabilecek.

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: ``, `` ve ``

## Ayrıca bakınız

* C++
* C++98
* C18 (C standart revizyonu)

## Kaynaklar

## Dış bağlantılar

* JTC1 / SC22 / WG21ISO / IEC C++ Standart Çalışma Grubu (diğer adıyla C++ Standartlar Komitesi)
* Ranges (range-v3  ) Github deposu, Eric Niebler