C++20
C++ dilinin revizyonları |
---|
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 durumlarda
typename
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
vetypeid
[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ı enumlarda
using
[34] constinit
anahtar sözcüğü[35]
Kütüphane
- aralıklar (The One Ranges Proposal)[36]
- Diziler için
std::make_shared
vestd::allocate_shared
[37] - atomik akıllı işaretçiler (
std::atomic<shared_ptr<T>>
vestd::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çinstd::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
- ^ "The Standard". isocpp.org. 19 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Eylül 2020.
- ^ "P1000R3: C++ IS schedule" (PDF). 1 Ekim 2019. 14 Kasım 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Şubat 2020.
- ^ "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.
- ^ "Current Status". isocpp.org. 8 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Eylül 2020.
- ^ "C++20 Approved -- Herb Sutter". isocpp.org. 11 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Eylül 2020.
- ^ "Why does the C++ standard ship every three years?". 13 Temmuz 2019 tarihinde kaynağından arşivlendi.
- ^ "P0592R0: To boldly suggest an overall plan for C++20". 8 Mart 2017 tarihinde kaynağından arşivlendi.
- ^ "P1141R1 - Yet another approach for constrained declarations". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
- ^ "P0606R0: Concepts Are Ready" (PDF). 28 Mart 2017 tarihinde kaynağından (PDF) arşivlendi.
- ^ "N4720: Working Draft, Extensions to C++ for Modules" (PDF). 30 Nisan 2019 tarihinde kaynağından (PDF) arşivlendi.
- ^ "Designated Initialization Wording". 15 Ekim 2017 tarihinde kaynağından arşivlendi.
- ^ "Allow lambda capture [=, this]". 9 Şubat 2019 tarihinde kaynağından arşivlendi.
- ^ "Familiar template syntax for generic lambdas". 21 Kasım 2018 tarihinde kaynağından arşivlendi.
- ^ "Range-based for statements with initializer". 6 Nisan 2017 tarihinde kaynağından arşivlendi.
- ^ "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.
- ^ "Wording for lambdas in unevaluated contexts" (PDF). 12 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
- ^ "Default constructible and assignable stateless lambdas" (PDF). 12 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
- ^ "String literals as non-type template parameters" (PDF). 11 Aralık 2017 tarihinde kaynağından (PDF) arşivlendi.
- ^ "Down with typename!". 22 Nisan 2018 tarihinde kaynağından arşivlendi.
- ^ "Language support for empty objects". 17 Nisan 2018 tarihinde kaynağından arşivlendi.
- ^ "Proposed wording for likely and unlikely attributes (Revision 5)". 13 Mayıs 2018 tarihinde kaynağından arşivlendi.
- ^ "explicit(bool)". www.open-std.org. 20 Temmuz 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Kasım 2018.
- ^ "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.
- ^ "P1330R0 - Changing the active member of a union inside constexpr". 26 Temmuz 2019 tarihinde kaynağından arşivlendi.
- ^ "P1002R0 - Try-catch blocks in constexpr functions" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
- ^ "P1327R0 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions". 26 Temmuz 2019 tarihinde kaynağından arşivlendi.
- ^ "P1006R1 - Constexpr in std::pointer_traits" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
- ^ "P1073R2 - Immediate functions". 26 Ekim 2018 tarihinde kaynağından arşivlendi.
- ^ "P1236R0: Alternative Wording for P0907R4 Signed Integers are Two's Complement". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
- ^ "P0668R4: Revising the C++ memory model". 11 Kasım 2018 tarihinde kaynağından arşivlendi.
- ^ "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.
- ^ "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.
- ^ "N4649: Working Draft, Technical Specification on C++ Extensions for Coroutines" (PDF). 16 Mayıs 2017 tarihinde kaynağından (PDF) arşivlendi.
- ^ "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.
- ^ "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.
- ^ "P0896R3" (PDF). 11 Kasım 2018 tarihinde kaynağından (PDF) arşivlendi.
- ^ "Extending make_shared to Support Arrays". 6 Eylül 2017 tarihinde kaynağından arşivlendi.
- ^ "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.
- ^ "Utility to convert a pointer to a raw pointer". 20 Şubat 2018 tarihinde kaynağından arşivlendi.
- ^ "Extending <chrono> to Calendars and Time Zones". 13 Mayıs 2018 tarihinde kaynağından arşivlendi.
- ^ "span: bounds-safe views for sequences of objects". 18 Mayıs 2019 tarihinde kaynağından arşivlendi.
- ^ "<version>". 18 Mayıs 2019 tarihinde kaynağından arşivlendi.
- ^ "Bit-casting object representations". www.open-std.org. 18 Ağustos 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2018.
- ^ "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.
- ^ "P1032R1 - Misc constexpr bits". 26 Ekim 2018 tarihinde kaynağından arşivlendi.
- ^ "Smart pointer creation with default initialization". 26 Ocak 2019 tarihinde kaynağından arşivlendi.
- ^ "std::map::contains - cppreference.com". en.cppreference.com. 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Mayıs 2020.
- ^ "P0553R4: Bit operations". www.open-std.org. 20 Temmuz 2019. 20 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
- ^ "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.
- ^ "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.
- ^ "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.
- ^ "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.
- ^ "P1152R4: Deprecating volatile". www.open-std.org. 20 Temmuz 2019. 23 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2019.
- ^ "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.
- ^ "C++ keywords - cppreference.com". en.cppreference.com. 19 Mart 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2019.
- ^ "explicit specifier - cppreference.com". en.cppreference.com. 21 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2019.
- ^ "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
- JTC1 / SC22 / WG2110 Ocak 2018 tarihinde Wayback Machine sitesinde arşivlendi. – ISO / IEC C++ Standart Çalışma Grubu (diğer adıyla C++ Standartlar Komitesi)
- Ranges (range-v3 10 Kasım 2020 tarihinde Wayback Machine sitesinde arşivlendi. ) Github deposu, Eric Niebler