Heerka C++20 waa la ansixiyay

Guddiga ISO ee Habaynta Luuqadda C++ ansixiyay heerka caalamiga ah"C ++ 20" Awoodaha lagu soo bandhigay qeexitaanka, marka laga reebo kiisaska go'doonsan, taageeray in compilers GCC, Calaacal ΠΈ Microsoft Visual C ++. Maktabadaha caadiga ah ee taageeraya C++20 ayaa laga hirgeliyay mashruuca dhexdiisa Yididiilo.

Labada bilood ee soo socota, qeexitaanka la ansixiyay wuxuu noqon doonaa heerka diyaarinta dukumeentiga daabacaadda, kaas oo lagu fulin doono shaqada sixitaannada khaladaadka higaada iyo daabacaadda. Horaanta Noofembar, dukumeentiga ka soo baxa waxaa loo diri doonaa ISO si loogu daabaco magaca rasmiga ah ISO/IEC 14882:2020. Dhanka kale, guddiga ayaa durba bilaabay shaqada heerka C++23 ee soo socda (C++2b) waxayna ka fiirsan doonaan xulashooyinka suurtagalka ah kulankooda xiga ee farsamada. wax cusub.

Main Astaamaha C ++ 20 (tusaalooyin kood):

  • Lagu daray "fikrado", kordhinta template, taas oo kuu ogolaanaysa inaad qeexdo shuruudaha halbeegyada template kuwaas, marka la ururiyo wakhtiga, xaddidaya xujooyinka doodaha ee loo aqbali karo cabbirrada template. Fikradaha waxaa loo isticmaali karaa si looga fogaado is-waafajinta macquulka ah ee udhaxeysa sifooyinka noocyada xogta ee lagu isticmaalo template-ka iyo nooca xogta ee xuduudaha gelinta.

    qaab-dhismeedka
    fikradda EqualityComparable = waxay u baahan tahay (T a, T b) {
    {a == b} -> std :: boolean;
    {a != b } -> std:: boolean;
    };

  • Waa la aqbalay fidinta si loogu shaqeeyo modules loo isticmaali karo halkii laga isticmaali lahaa faylalka madaxa. Modules waxay bixiyaan hab cusub oo lagu abaabulo koodka isha ku salaysan qeexidda xuduudaha qaybaha, iyada oo aan lagu darin faylalka madaxa iyada oo loo marayo "#include".
  • Macro __VA_OPT__ loogu talagalay balaadhinta la qabsiga ee macros doorsooma iyadoo ku xidhan joogitaanka calaamadaha ku jira dooda doorsoomiyaha.
  • Taageerada "" hawlwadeenka isbarbardhigga saddex-geesoodka ah.
  • Taageerada bilowga curiyeyaasha asalka ah ee bitfields.
  • Awoodda qabashada lambda "* tan" tibaaxaha.

    qaabdhismeed_qiimo {
    int n = 0;
    auto getter_fn() {
    //XUN:
    // soo noqo [=] () { soo celinta n; };

    // WANAAGSAN:
    soo noqoshada [=, *tani] () { soo celi n; };
    }
    };

  • U yeedhida canaasirta tilmaame (Pointer-to-member), iyada oo la adeegsanayo tilmaameyaal walxo ku meel gaadh ah oo lagu qeexay odhaahda β€œconst &”
  • Hawlwadeenka tirtirka ee leh wax dumiye ayaa lagu sifeeyay dukumeentiga P0722R1.
  • Fasallada waxaa loo oggol yahay inay isticmaalaan cabbirada templateka oo aan lahayn nooc.

    qaabka foo {
    foo() = default;
    constexpr foo(int) {}
    };

    qaab-dhismeedka
    auto get_foo() {
    soo noqo f;
    }

    heli_foo(); // adeegsada dhisme qarsoon
    heli_foo ();

  • Tibaaxaha lambda ee aan joogtada ahayn ee leh dhise.
  • Oggolaanshaha qaab-dhismeedka qaab-dhismeedka tibaaxaha lambda ("auto f = [] (std:: vector v))).
  • Awoodda isticmaalka xargaha xargaha ee cabbirrada template.
  • Taageerada habaynta C-style syntax - meelaha aan si cad ugu taxan liiska bilowga waxa lagu bilaabay si toos ah.

    qaabka A {
    intx;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2

  • Taageerada xubnaha qaab dhismeedka xogta madhan.
  • Taageerada sifooyinka suurtagalka ah iyo kuwa aan suurtogalka ahayn si loogu wargaliyo hagaajinta ixtimaalka dhismaha shuruudaysan ee la kiciyay ("[[laga yaabo]] haddii ( random > 0) {").
  • Awoodda isticmaalka kala duwanaanta si loo bilaabo qiyamka doorsooma ee loop "for"

    loogu talagalay (auto v = std :: vector {1, 2, 3}; auto& e : v) {

  • Xisaabinta tooska ah ee cabbirka qaabka cusub ("laba laab cusub[]{1,2,3}");
  • Sifada "[[no_unique_address]]" taas oo doorsoomayaal aan xog lahayn aysan qaadan meel bannaan.
  • Tilmaamaha atomiga (std :: atomic > iyo std :: atomic >).
  • Awoodda loogu yeero hawlaha farsamada ee tibaaxaha shuruudaysan.
  • Taageerada hawlaha degdega ah ee la shaqeyn kara oo keliya joogtada ah.

    consteval int sqr(int n) {
    soo noqo n * n;
    }

    constexpr int r = sqr (100); // OK
    int x = 100;
    int r2 = sqr (x); // Cillad: 'x' looma isticmaali karo si joogto ah

  • Awoodda isticmaalka constexpr oo leh hawlo farsamo ("constexpr virtual int f() const { soo celinta 2; }").
  • Maktabada caadiga ah:
    • Taageerada lagu daray nooca char8_t ee xargaha UTF-8.
    • Faylasha madaxa ee lagu daray xoogaa (qaar yar) iyo nooca.
    • Hadda waa suurtogal in la hubiyo horgalayaasha iyo daba-galka xargaha (bilawga_ku dhammaada_la)
    • Kudaray std :: ka saar_cvref, std :: tixraac_tixraac, std :: unwrap_decay_ref, std :: is_nothrow_convertible iyo std :: nooca_aqoonsiga.
    • Hawlaha lagu daray std :: barta dhexe, std :: lerp, std :: bind_front, std :: isha_goobta, std :: booqasho, std :: waa_ joogta ah_la qiimeeyay iyo std :: qiyaasi_aligned.
    • Taageero lagu daray arrays std:: make_la wadaagay.
    • Lagu darey std :: shaqada_array si loogu badalo shayada array u eg std:: array.
  • Tiro-koob aad u habboon:

    enum class rgba_color_channel {cas, cagaar, buluug, alfa};

    std :: string_view to_string(rgba_color_channel my_channel) {
    beddel (my_channel) {
    isticmaalaya enum rgba_color_channel;
    kiis cas: soo celi "cas";
    kiis cagaaran: soo celi "cagaaran";
    kiis buluug ah: soo celi "buluug";
    kiis alfa: soo celi "alfa";
    }
    }

  • Tusmooyinka, dabeecadda aan la qeexin awgeed, isticmaalka qalliinka "," ("a[b,c]") waa mamnuuc. Taageerada inta badan hawlgallada doorsoomayaasha lagu dhawaaqay ee leh kelmadda muhiimka ah ee kacsan waa la joojiyay, oo ay ku jiraan hawlgallada "++" iyo "-" ee leh noocyada caadiga ah.
  • La dhimay tirada xaaladaha taas oo "typename" looga baahan yahay si ay u muujiyaan joogitaanka nooc.

Source: opennet.ru

Add a comment