C++20 inbhe air aontachadh

Comataidh ISO air Inbhe a’ Chànain C++ aontaichte inbhe eadar-nàiseanta"C ++ 20". Na comasan a tha air an taisbeanadh san t-sònrachadh, ach a-mhàin cùisean iomallach, taic ann an luchd-cruinneachaidh GCC, clang и Microsoft Visual C ++. Tha leabharlannan àbhaisteach a’ toirt taic do C++20 air an cur an gnìomh taobh a-staigh a’ phròiseict A BHROSNACHADH.

Anns an ath dhà mhìos, bidh an sònrachadh aontaichte aig an ìre de bhith ag ullachadh na sgrìobhainn airson fhoillseachadh, far an tèid obair a dhèanamh air ceartachadh deasachaidh mhearachdan litreachaidh agus typos. Tràth san t-Samhain, thèid an sgrìobhainn a thig às a chuir gu ISO airson fhoillseachadh fon ainm foirmeil ISO / IEC 14882: 2020. Anns an eadar-ama, tha a’ chomataidh mu thràth air tòiseachadh air obair air an ath inbhe C++23 (C++2b) agus beachdaichidh iad air roghainnean a dh’ fhaodadh a bhith ann aig an ath choinneamh bhrìgheil aca. innleachdan.

prìomh feartan C ++ 20 (eisimpleirean de chòd):

  • Chaidh “bun-bheachdan”, leudachadh teamplaid a chuir ris, a leigeas leat seata de riatanasan paramadair teamplaid a mhìneachadh a bhios, aig àm cruinneachaidh, a’ cuingealachadh an t-seata argamaidean a ghabhas gabhail riutha mar pharaimearan teamplaid. Faodar na bun-bheachdan a chleachdadh gus neo-chunbhalachd loidsigeach a sheachnadh eadar feartan nan seòrsaichean dàta a thathar a’ cleachdadh taobh a-staigh an teamplaid agus feartan seòrsa dàta nam paramadairean cuir a-steach.

    teamplaid
    bun-bheachd EqualityComparable = feum (T a, T b) {
    { a == b } -> std ::boolean;
    { a != b } -> std ::boolean;
    };

  • Air gabhail ris leudachadh airson a bhith ag obair le modalan a ghabhas cleachdadh an àite faidhlichean cinn. Tha modalan a’ toirt seachad dòigh ùr air còd stòr a chuir air dòigh stèidhichte air crìochan phàirtean a mhìneachadh, gun a bhith a’ toirt a-steach faidhlichean cinn tro “#include”.
  • Macro __VA_OPT__ airson leudachadh atharrachail air macros caochlaideach a rèir làthaireachd comharran san argamaid chaochlaideach.
  • Taic don " "ghnìomhaiche airson coimeas trì-shlighe.
  • Taic airson tùsairean eileamaid bunaiteach airson bitfields.
  • Comas air abairtean “* seo” a ghlacadh.

    structar int_value {
    int n = 0;
    auto getter_fn() {
    //BAD:
    // tilleadh [=] () { tilleadh n; };

    // MATH:
    tilleadh [=, *seo] () { tilleadh n; };
    }
    };

  • A’ gairm eileamaidean le puing (Pointer-to-ball), a’ cleachdadh comharran gu nithean sealach a tha air am mìneachadh tron ​​abairt “const &”.
  • An gnìomhaiche sguabaidh às le inneal-sgrios air a mhìneachadh san sgrìobhainn P0722R1.
  • Tha cead aig clasaichean paramadairean teamplaid a chleachdadh gun seòrsa.

    struct foo {
    foo() = bunaiteach;
    constexpr foo(int) {}
    };

    teamplaid
    auto get_foo() {
    tilleadh f;
    }

    faigh_foo(); // a’ cleachdadh inneal-togail ciallach
    faigh_foo ();

  • Abairtean lambda neo-sheasmhach le constructor.
  • A’ ceadachadh co-chòrdadh teamplaid airson abairtean lambda (“auto f = [] (std :: vector v)").
  • Comas litrichean sreang a chleachdadh ann am paramadairean teamplaid.
  • Taic airson co-chòrdadh tòiseachaidh stoidhle C - tha raointean nach eil air an liostadh gu soilleir air an liosta tòiseachaidh air an tòiseachadh gu bunaiteach.

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

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

  • Taic do bhuill structar dàta falamh.
  • Taic airson na buadhan a tha coltach agus eu-coltach gus innse don optimizer mun choltas gun tèid an togail cumhach a phiobrachadh (“[[dualtach]] ma tha (air thuaiream> 0) {“).
  • Comas raointean a chleachdadh gus luachan caochlaideach a thòiseachadh ann an lùb “airson”.

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

  • Obrachadh fèin-ghluasadach air meud rèite ann an ùr (“dùbailte ùr[]{1,2,3}”);
  • Am feart “[[no_unique_address]]” anns nach bi caochladairean gun dàta a’ gabhail àite.
  • Comharran atamach (std ::atomic > agus std ::atamach >).
  • Comas gnìomhan brìgheil a ghairm ann an abairtean cumhach.
  • Taic airson gnìomhan sa bhad nach urrainn ach obrachadh le cunbhalachd.

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

    constexpr int r = sqr(100); // Ceart gu leòr
    int x = 100;
    int r2 = sqr(x); // MEARACHD: chan urrainn "x" a chleachdadh mar shlat-tomhais

  • Comasach air constexpr a chleachdadh le gnìomhan brìgheil (“constexpr virtual int f () const { tilleadh 2; } ”).
  • Anns an leabharlann àbhaisteach:
    • Taic a bharrachd airson an seòrsa char8_t airson sreangan UTF-8.
    • Chaidh faidhlichean cinn a chur ris (bit obrachaidhean) agus dreach.
    • Tha e comasach a-nis sgrùdadh a dhèanamh air ro-leasachan agus iar-leasachan nan sreangan (starts_with, ends_with).
    • Std air a chur ris :: remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible agus std :: type_identity traits.
    • Gnìomhan a bharrachd std :: midpoint, std ::lerp, std :: bind_front, std :: source_location, std :: visit, std:: is_constant_valuated agus std :: assume_aligned.
    • Taic a bharrachd airson arrays gu std :: make_shared.
    • Chaidh gnìomh std ::to_array a chur ris gus nithean coltach ri sreath a thionndadh gu std :: array.
  • Co-chòrdadh àireamhachd nas freagarraiche:

    clas enum rgba_color_channel { dearg, uaine, gorm, alpha };

    std :: string_view to_string (rgba_color_channel my_channel) {
    suidse (my_channel) {
    cleachdadh enum rgba_color_channel;
    cùis dearg: return "red";
    cùis uaine: return “green”;
    cùis ghorm: return "blue";
    cùis alpha: tilleadh “alpha”;
    }
    }

  • Ann an clàran-amais, mar thoradh air giùlan neo-mhìnichte, thathas a’ toirmeasg cleachdadh na h-obrach “,” (“a[b,c]”). Chaidh stad a chuir air taic airson a’ mhòr-chuid de ghnìomhachdan le caochladairean air an ainmeachadh leis a’ phrìomh fhacal luaineach, a’ toirt a-steach gnìomhachd “++” agus “-” le seòrsachan àbhaisteach.
  • Lùghdaich an àireamh de shuidheachaidhean far a bheil feum air “typename” gus sealltainn gu bheil seòrsa ann.

Source: fosgailtenet.ru

Cuir beachd ann