C++20 caighdeánach ceadaithe

Coiste ISO um Chaighdeánú na Teanga C++ ceadaithe caighdeán idirnáisiúnta"C ++ 20“. Na cumais a chuirtear i láthair sa tsonraíocht, cé is moite de chásanna iargúlta, tacaithe i dtiomsaitheoirí GCC, Clag и Microsoft Visual C ++. Cuirtear leabharlanna caighdeánacha a thacaíonn le C++20 i bhfeidhm laistigh den tionscadal Treisiú.

Sa dá mhí atá romhainn, beidh an tsonraíocht fhormheasta ag an gcéim ag ullmhú an doiciméid le haghaidh foilsithe, agus déanfar obair ar cheartú eagarthóireachta ar earráidí litrithe agus clóscríobh ag an am sin. Go luath i mí na Samhna, seolfar an doiciméad a bheidh mar thoradh air chuig ISO lena fhoilsiú faoin ainm foirmiúil ISO/IEC 14882:2020. Idir an dá linn, tá obair tosaithe cheana féin ag an gcoiste ar an gcéad chaighdeán C++23 eile (C++2b) agus breithneoidh sé roghanna féideartha ag a chéad chruinniú fíorúil eile. nuálaíochtaí.

An príomh- Gnéithe C ++ 20 (samplaí cód):

  • Cuireadh "coincheapa", síntí teimpléid leis, a ligeann duit sraith de cheanglais pharaiméadar teimpléid a shainiú a chuireann teorainn, ag am tiomsaithe, leis an sraith argóintí ar féidir glacadh leo mar pharaiméadair teimpléid. Is féidir na coincheapa a úsáid chun neamhréireachtaí loighciúla a sheachaint idir airíonna na gcineálacha sonraí a úsáidtear laistigh den teimpléad agus airíonna cineál sonraí na bparaiméadar ionchuir.

    teimpléad
    coincheap EqualityComparable = éilíonn(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • Glactar leis síntí chun oibriú le modúil is féidir a úsáid in ionad comhaid ceanntásc. Soláthraíonn modúil bealach nua chun cód foinse a eagrú bunaithe ar theorainneacha na gcomhpháirteanna a shainiú, gan comhaid ceanntásca a áireamh trí “#include”.
  • Macra __VA_OPT__ le haghaidh leathnú oiriúnaitheach macraí inathraithe ag brath ar láithreacht comharthaí san argóint athróg.
  • Tacaíocht don " "oibreoir le haghaidh comparáide trí bhealach.
  • Tacaíocht do thúsaitheoirí eilimint réamhshocraithe le haghaidh bitfields.
  • Cumas chun lambda a ghabháil "* seo" nathanna cainte.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //BAD:
    // filleadh [=] () { ais n; };

    // MAITH:
    filleadh [=, *seo]() { ais n; };
    }
    };

  • Ag glaoch ar eilimintí le pointeoir (pointeoir go ball), ag baint úsáide as leideanna chun rudaí sealadacha a shainítear tríd an slonn “const &”.
  • An t-oibreoir scriosta le destructor cur síos air sa doiciméad P0722R1.
  • Tá cead ag ranganna paraiméadair teimpléid a úsáid gan cineál.

    struct foo {
    foo() = réamhshocraithe;
    constexpr foo(int) {}
    };

    teimpléad
    auto get_foo() {
    filleadh f;
    }

    faigh_foo(); // úsáideann cruthaitheoir intuigthe
    faigh_foo ();

  • Sloinn lambda neamhsheasmhach le cruthaitheoir.
  • Comhréir theimpléad a cheadú le haghaidh slonn lambda (“auto f = [] (std::veicteoir v)").
  • Cumas úsáid a bhaint as teaghráin-litreacha i bparaiméadar teimpléid.
  • Tacaíocht do chomhréir tosaigh C-stíl - cuirtear tús le réimsí nach bhfuil liostaithe go sainráite sa liosta tosaighithe de réir réamhshocraithe.

    struchtúr A {
    intx;
    int y;
    int z = 123;
    };

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

  • Tacaíocht do bhaill struchtúir sonraí folamh.
  • Tacaíocht do na tréithe dóchúla agus neamhdhócha chun an t-uasmhéadaitheoir a chur ar an eolas faoin dóchúlacht go spreagfar an tógáil choinníollach (“[[dócha]] más rud é (randamach > 0) {“).
  • Cumas raonta a úsáid chun luachanna athraitheacha a thúsú i lúb “do”.

    le haghaidh (auto v = std::veicteoir{1, 2, 3}; auto& e : v) {

  • Méid an eagar a ríomh go huathoibríoch (“dúbailte nua[]{1,2,3}”);
  • An aitreabúid “[[no_unique_address]]” ina n-úsáideann athróga gan sonraí spás.
  • Leideanna adamhach (std::adamhach > agus std::adamhach >).
  • Cumas feidhmeanna fíorúla a ghlaoch i nathanna coinníollach.
  • Tacaíocht d’fheidhmeanna láithreach nach féidir oibriú ach le tairisigh.

    constabal int sqr(int n) {
    filleadh n*n;
    }

    constexp int r = sqr(100); // Ceart go leor
    int x = 100;
    int r2 = sqr(x); // ERROR: ní féidir 'x' a úsáid mar tairiseach

  • Féidearthacht constexpr a úsáid le feidhmeanna fíorúla (“constexpr fíorúil int f() const { tuairisceán 2; }”).
  • Sa ghnáthleabharlann:
    • Tacaíocht bhreise don chineál char8_t le haghaidh teaghráin UTF-8.
    • Cuireadh giotán comhaid header (oibríochtaí giotán) agus leagan.
    • Is féidir réimír agus iarmhír na teaghrán a sheiceáil anois (starts_with, ends_with).
    • Curtha leis std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible agus std::type_identity traits.
    • Feidhmeanna breise std::lárphointe, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_valuated and std::assume_aligned.
    • Tacaíocht curtha leis d'eagair le std::make_shared.
    • Curtha leis std::to_array chun réada cosúil le eagar a thiontú go std::eagar.
  • Comhréir áirimh níos áisiúla:

    rang enum rgba_color_channel { dearg, glas, gorm, alfa };

    std:: string_view to_string(rgba_color_channel my_channel) {
    lasc (my_channel) {
    ag baint úsáide as enum rgba_color_channel;
    cás dearg: return "red";
    tuiseal glas: return "green";
    cás gorm: filleadh "blue";
    cás alfa: filleadh "alpha";
    }
    }

  • In innéacsanna, mar gheall ar iompar neamhshainithe, toirmisctear úsáid na hoibríochta “,” (“a[b,c]”). Cuireadh deireadh le tacaíocht don chuid is mó d'oibríochtaí a bhfuil athróga dearbhaithe leis an eochairfhocal luaineach, lena n-áirítear na hoibríochtaí "++" agus "-" le cineálacha caighdeánacha.
  • Laghdú ar líon na gcásanna ina bhfuil gá le "cineál" chun láithreacht cineáil a léiriú.

Foinse: oscailtenet.ru

Add a comment