C++20 paerewa kua whakaaetia

Ko te Komiti ISO mo te Paerewa o te Reo C++ whakaaetia paerewa ao"C ++ 20". Ko nga kaha e whakaatuhia ana i roto i nga korero, haunga nga keehi motuhake, tautokohia i roto i te hunga whakahiato GCC, Ngatata и Microsoft Visual C ++. Ko nga whare pukapuka paerewa e tautoko ana i te C++20 ka whakatinanahia i roto i te kaupapa whakanui.

I roto i nga marama e rua e whai ake nei, ko te whakatakotoranga kua whakamanahia kei te waahi ki te whakarite i te tuhinga mo te whakaputanga, ka mahia nga mahi mo te whakatika whakatika i nga hapa o te takikupu me nga hapa. Hei te timatanga o Whiringa-a-rangi, ka tukuna te tuhinga ki te ISO mo te whakaputa i raro i te ingoa okawa ISO/IEC 14882:2020. I tenei wa, kua timata kee te komiti ki te mahi mo te paerewa C++23 e whai ake nei (C++2b) ka whai whakaaro ki nga whiringa ka taea i tana hui mariko e whai ake nei. nga mahi auaha.

Main особенности C ++ 20 (tauira waehere):

  • "Aria" kua taapirihia, nga taapiri tauira, ka taea e koe te tautuhi i te huinga o nga whakaritenga tawhā tauira, i te wa whakahiato, ka whakawhāiti i te huinga tohenga ka taea te whakaae hei tawhā tauira. Ka taea te whakamahi i nga ariā hei karo i nga taupatupatu arorau i waenga i nga ahuatanga o nga momo raraunga e whakamahia ana i roto i te tauira me nga ahuatanga momo raraunga o nga tawhā whakauru.

    tauira
    ariā ŌriteWhakariterite = me hiahia(T a, T b) {
    {a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • Whakaaetia whakawhānui mo te mahi me nga waahanga ka taea te whakamahi hei utu mo nga konae pane. Ko nga waahanga he huarahi hou hei whakarite i te waehere puna i runga i te tautuhi i nga rohe o nga waahanga, me te kore e whakauru i nga konae pane ma te "#include".
  • Tonotono __VA_OPT__ mo te roha urutau o nga tonotono taurangi i runga i te ahua o nga tohu kei roto i te tautohe taurangi.
  • Tautoko mo te kaiwhakahaere "" mo te whakataurite e toru-ara.
  • Tautoko mo nga kaiwhakataki huanga taunoa mo nga mara moka.
  • Te kaha ki te hopu i nga kupu "*tenei" lambda.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //KINO:
    // hoki [=]() { hoki n; };

    // HE pai:
    hoki [=, *tenei]() { hoki mai n; };
    }
    };

  • Te waea i nga huānga ma te atatohu (Pointer-to-member), ma te whakamahi tohutohu ki nga mea rangitahi kua tautuhia ma te kupu "const &".
  • Ko te kaiwhakahaere muku me te kaiwhakangaro i whakaahuatia i roto i te tuhinga P0722R1.
  • Ka whakaaetia nga karaehe ki te whakamahi i nga tawhā tauira kaore he momo.

    hanganga foo {
    foo() = taunoa;
    constexpr foo(int) {}
    };

    tauira
    auto tiki_foo() {
    hoki f;
    }

    tiki_foo(); // ka whakamahi i te kaihanga hangai
    tiki_foo ();

  • Nga korero lambda kore-mau tonu me te kaihanga.
  • Whakaaetia te wetereo tauira mo nga korero lambda (“aunoa f = [] (std::vector v)").
  • Te kaha ki te whakamahi kupu aho i roto i nga tawhā tauira.
  • Tautoko mo te wetereo arawhiti-a-C - ko nga mara kaore i tino whakarārangihia ki te rarangi arawhiti ka arawhiti taunoa.

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

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

  • Tautoko mo nga mema hanganga raraunga kau.
  • Tautoko mo nga huanga pea me nga huanga kare pea hei whakamohio ki te kaihoroi mo te tupono ka puta te hanga here (“[[pea]] mena (tupurangi > 0) {“).
  • Te kaha ki te whakamahi i nga awhe ki te arawhiti i nga uara taurangi i roto i te kopae "mo".

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

  • Te tātai aunoa o te rahi huānga ki te hōu ("hou taurua []{1,2,3}");
  • Ko te huanga “[[no_unique_address]]” e kore ai nga taurangi kaore he raraunga e whai waahi.
  • Tohu ngota (std::ngota > me te std::ngota >).
  • Te kaha ki te karanga i nga mahi mariko i roto i nga korero here.
  • Tautoko mo nga mahi tonu ka taea anake te mahi me nga taumau.

    consteval int sqr(int n) {
    hoki mai n * n;
    }

    constexpr int r = sqr(100); //ĀE
    int x = 100;
    int r2 = sqr(x); // HAPA: 'x' kāore e taea te whakamahi hei pūmau

  • Ka taea te whakamahi constexpr me nga mahi mariko (“constexpr virtual int f() const { return 2; }”).
  • I roto i te whare pukapuka paerewa:
    • He tautoko taapiri mo te momo char8_t mo nga aho UTF-8.
    • He moka nga konae pane (nga mahi moka) me te putanga.
    • Inaianei ka taea te tirotiro i te prefix me te kumara o nga aho (starts_with, ends_with).
    • Kua taapirihia te std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible me std::type_identity huru.
    • Kua taapirihia nga mahi std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std:: is_constant_evaluated and std::assume_aligned.
    • He tautoko taapiri mo nga huinga ki te std::make_shared.
    • Kua taapirihia te mahi std::to_array ki te huri i nga taonga-rite ki te std::array.
  • He watea ake te wetereo tatau:

    enum class rgba_color_channel {whero, kakariki, kahurangi, alpha};

    std:: aho_tiro ki te aho(rgba_color_channel my_channel) {
    whakawhiti (taku_hongere) {
    te whakamahi i te enum rgba_color_channel;
    take whero: whakahokia "whero";
    case green: whakahokia "matomato";
    take kahurangi: whakahokia "puru";
    take alpha: whakahokia "alpha";
    }
    }

  • I roto i nga taurangi, na te mea kaore i tautuhia, ka aukatihia te whakamahi i te mahi "," (“a[b,c]”). Ko te tautoko mo te nuinga o nga mahi me nga taurangi e kii ana me te kupu matua ohorere kua whakamutua, tae atu ki nga mahi "++" me "—" me nga momo paerewa.
  • I whakaitihia te maha o nga ahuatanga e hiahiatia ana "ingoa momo" hei tohu i te noho o tetahi momo.

Source: opennet.ru

Tāpiri i te kōrero