C ++20 muyezo wovomerezeka

ISO Committee on Standardization of the C ++ Language kuvomerezedwa international standard "C ++ 20". Kuthekera komwe kumaperekedwa mwatsatanetsatane, kupatula milandu yokhayokha, zothandizidwa mu compilers GCC, kulira ΠΈ Microsoft Zojambula C ++. Ma library okhazikika omwe amathandizira C++20 amakwaniritsidwa mkati mwa polojekitiyi mphamvu.

M'miyezi iwiri yotsatira, mfundo ovomerezeka adzakhala pa siteji ya kukonzekera chikalata kufalitsidwa, pa ntchito idzachitika pa mkonzi kukonza zolakwika kalembedwe ndi typos. Kumayambiriro kwa Novembala, chikalata chotsatira chidzatumizidwa ku ISO kuti chifalitsidwe pansi pa dzina lovomerezeka la ISO/IEC 14882:2020. Pakadali pano, komitiyi yayamba kale kugwira ntchito pa C++23 muyeso wotsatira (C++2b) ndipo ilingalira zomwe zingatheke pamsonkhano wawo wotsatira. zatsopano.

waukulu Mawonekedwe C ++ 20 (zitsanzo kodi):

  • "Maganizo" owonjezera, zowonjezera ma template, zomwe zimakulolani kufotokozera zofunikira za template zomwe, panthawi yosonkhanitsa, zimachepetsa mikangano yomwe ingavomerezedwe ngati magawo a template. Malingaliro angagwiritsidwe ntchito kupewa kusagwirizana koyenera pakati pa katundu wa mitundu ya deta yomwe imagwiritsidwa ntchito mkati mwa template ndi mtundu wa data wa magawo olowetsamo.

    template
    lingaliro EqualityComparable = amafuna (T a, T b) {
    {a == b} -> std::boolean;
    {a != b} -> std::boolean;
    };

  • Adalandiridwa kukulitsa pogwira ntchito ndi ma module omwe angagwiritsidwe ntchito m'malo mwa mafayilo apamutu. Ma modules amapereka njira yatsopano yokonzekera ma code source potengera malire a zigawo, popanda kuphatikizapo mafayilo amutu kudzera pa "#include".
  • Macro __VA_OPT__ pakukulitsa kosinthika kwa ma macros osiyanasiyana kutengera kupezeka kwa ma tokeni pamakangano osinthika.
  • Thandizo la "" wogwiritsa ntchito poyerekezera njira zitatu.
  • Thandizo la zoyambira zosasinthika za bitfields.
  • Kutha kwa lambda kujambula mawu a "* this".

    pangani int_value {
    inu n = 0;
    galimoto getter_fn() {
    //ZOIPA:
    // kubwerera [=]() { kubwerera n; };

    // ZABWINO:
    bwererani [=, *izi]() { kubwerera n; };
    }
    };

  • Kuitana zinthu ndi cholozera (Pointer-to-member), kugwiritsa ntchito zolozera kuzinthu zosakhalitsa zomwe zimatanthauzidwa kudzera mu mawu oti "const &" .
  • Wothandizira wochotsa ndi wowononga wofotokozedwa m'chikalatacho P0722R1.
  • Makalasi amaloledwa kugwiritsa ntchito magawo a template popanda mtundu.

    panga foo {
    foo () = kusakhazikika;
    constexpr foo(int) {}
    };

    template
    auto get_foo() {
    kubwerera f;
    }

    get_foo(); // amagwiritsa ntchito womanga wokhazikika
    get_foo ();

  • Mawu osakhazikika a lambda okhala ndi womanga.
  • Kulola mawu a template a mawu a lambda (β€œauto f = [] (std::vector v)).
  • Kutha kugwiritsa ntchito zingwe zenizeni mu magawo a template.
  • Thandizo la kalembedwe ka C-kalembedwe ka mawu oyambira - magawo omwe sanatchulidwe pamndandanda woyambira amayambitsidwa mwachisawawa.

    kupanga A {
    inu x;
    ine y;
    int z = 123;
    };

    A {.x = 1, .z = 2}; // nkhwangwa == 1, ayi == 0, az == 2

  • Kuthandizira kwa mamembala amtundu wa data opanda kanthu.
  • Kuthandizira zomwe zingatheke komanso zomwe sizingachitike kuti zidziwitse wokhathamiritsa za kuthekera kwakuti kumanga koyenera kuyambika ("[[mwina]] ngati (mwachisawawa> 0) {β€œ).
  • Kutha kugwiritsa ntchito masinthidwe kuti ayambitse zosintha mu "kwa" loop

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

  • Kuwerengera mokha kwa magulu atsopano (β€œwatsopano kawiri[]{1,2,3}”);
  • "[no_unique_address]]" mawonekedwe omwe zosintha zopanda deta sizitenga malo.
  • Zolozera za atomiki (std::atomic > ndi std::atomic >).
  • Kutha kuyimba ntchito zenizeni m'mawu okhazikika.
  • Kuthandizira ntchito zaposachedwa zomwe zitha kugwira ntchito ndi zokhazikika.

    consteval int sqr(int n) {
    kubwerera n *n;
    }

    constexpr int r = sqr(100); // CHABWINO
    inu x = 100;
    int r2 = sqr(x); // ZOPHUNZITSA: 'x' sangathe kugwiritsidwa ntchito ngati nthawi zonse

  • Kuthekera kogwiritsa ntchito constexpr ndi ntchito zenizeni ("constexpr virtual int f () const {kubwerera 2; }").
  • Mu laibulale yokhazikika:
    • Zowonjezera zothandizira mtundu wa char8_t wa zingwe za UTF-8.
    • Mafayilo amutu owonjezera pang'ono (ntchito pang'ono) ndi mtundu.
    • Tsopano ndizotheka kuyang'ana choyambirira ndi zomata za zingwe (starts_with, ends_with).
    • Adawonjezedwa std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ndi std::type_identity.
    • Ntchito zowonjezeredwa std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated ndi std::assume_aligned.
    • Thandizo lowonjezera la magulu ku std::make_shared.
    • Anawonjezera std::to_array ntchito kuti asinthe zinthu ngati zotsatizana kukhala std::array.
  • Mafotokozedwe osavuta a enumeration:

    enum class rgba_color_channel {wofiira, wobiriwira, wabuluu, alpha};

    std::string_view to_string(rgba_color_channel my_channel) {
    sinthani (channel_wanga) {
    pogwiritsa ntchito enum rgba_color_channel;
    mlandu wofiira: kubwerera "wofiira";
    mlandu wobiriwira: kubwerera "wobiriwira";
    mlandu buluu: kubwerera "buluu";
    case alpha: kubwerera "alpha";
    }
    }

  • M'ma index, chifukwa cha khalidwe losadziwika, kugwiritsa ntchito "," ("a[b,c]") ndikoletsedwa. Thandizo la machitidwe ambiri okhala ndi zosinthika zomwe zalengezedwera ndi mawu osasinthika atha, kuphatikiza "++" ndi "-" machitidwe okhala ndi mitundu yokhazikika.
  • Kuchepetsa kuchuluka kwa zochitika zomwe "typename" imafunika kuwonetsa kukhalapo kwa mtundu.

Source: opennet.ru

Kuwonjezera ndemanga