C++ 20 chiyero chakabvumidzwa

ISO Komiti yeKumira kweiyo C ++ Mutauro mvumo international standard "C ++ 20". Izvo zvinogoneka zvakaratidzwa mune yakatarwa, kunze kwemakesi ari ega, akatsigira mune compilers GCC, clang ΠΈ Microsoft Inoona C ++. Maraibhurari akajairwa anotsigira C ++ 20 anoitwa mukati meprojekiti wedzera.

Mumwedzi miviri inotevera, iyo yakatemerwa yakatarwa ichave padanho rekugadzirira gwaro kuti ribudiswe, iro basa richaitwa pakugadziriswa kwekunyora kwekukanganisa kwezviperengo uye typos. Mukutanga kwaMbudzi, gwaro rinozobuda richatumirwa kuISO kuti ribudiswe pasi pezita repamutemo ISO/IEC 14882:2020. Zvichakadaro, komiti yakatotanga basa pane inotevera C++23 standard (C++2b) uye ichafunga zvingasarudzwa pamusangano wayo unotevera. zvitsva.

chikuru maficha C ++ 20 (kodhi mienzaniso):

  • Yakawedzerwa "concepts", template extensions, iyo inokubvumira kuti utsanangure seti ye template parameter inodiwa iyo, panguva yekubatanidza, inodzikamisa seti yenharo dzinogona kugamuchirwa se template paramita. Mafungiro anogona kushandiswa kudzivirira kusawirirana kunonzwisisika pakati pezvinhu zvemhando dze data dzinoshandiswa mukati me template uye dhata yemhando yezvinhu zveiyo yekuisa paramita.

    template
    pfungwa KuenzanaComparable = inoda(T a, T b) {
    {a == b } -> std::boolean;
    {a != b } -> std::boolean;
    };

  • Kugamuchirwa kuwedzera yekushanda nemamodule anogona kushandiswa panzvimbo yemafaira emusoro. Modules inopa nzira nyowani yekuronga kodhi kodhi zvichienderana nekutsanangura miganhu yezvikamu, pasina kusanganisa mafaira emusoro kuburikidza ne "#include".
  • Macro __VA_OPT__ yekuwedzera kuchinjika kwemacros akasiyana zvichienderana nekuvapo kwematokeni mukupokana kwakasiyana.
  • Tsigiro ye "" opareta yenzira nhatu kuenzanisa.
  • Tsigiro yezvimiro zvekutanga zvekutanga zvebitfields.
  • Kugona lambda kutora "* izvi" mataurirwo.

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

    // KUGONA:
    return [=, *iyi]() { return n; };
    }
    };

  • Kudaidza zvinhu nepointer (Pointer-to-member), uchishandisa anonongedzera kuzvinhu zvenguva pfupi zvinotsanangurwa kuburikidza neiyo "const &" kutaura.
  • Iyo yekudzima mushandisi ine muparadzi anotsanangurwa mugwaro P0722R1.
  • Makirasi anotenderwa kushandisa template paramita pasina mhando.

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

    template
    auto get_foo() {
    return f;
    }

    get_foo(); // inoshandisa muvaki akajeka
    get_foo();

  • Matauriro e-lambda asingarambe aine muvaki.
  • Inobvumira kushandiswa kwe template syntax yemashoko e lambda ("auto f = [] (std::vector v)").
  • Kugona kushandisa tambo literals mune template paramita.
  • Tsigiro yeC-style yekutanga syntax - minda isina kunyorwa pachena mukutanga runyorwa inotangwa nekusarudzika.

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

    A {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2

  • Tsigiro kune isina chinhu data chimiro nhengo.
  • Tsigiro yezvingangoitika uye zvisingafungidzirwe hunhu kuzivisa iyo optimizer nezve mukana weiyo yemamiriro ekuvakwa ari kukonzeresa ("[[zvichida]] kana (zvisina kurongeka> 0) {β€œ).
  • Kugona kushandisa marenji kuti atange akasiyana siyana mu "ye" loop

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

  • Kuverengera otomatiki kwehukuru hwakarongeka mune hutsva ("nyowani mbiri[]{1,2,3}");
  • Iyo "[[no_unique_address]]" hunhu umo zvinosiyana zvisina data hazvitore nzvimbo.
  • Atomic anonongedzera (std::atomic> uye std::atomic>).
  • Kugona kudaidza chaiwo mabasa mune inomisikidzwa mataurirwo.
  • Tsigiro yemabasa ekukurumidza anogona kungoshanda nemaconstants.

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

    constexpr int r = sqr(100); // Zvakanaka
    int x = 100;
    int r2 = sqr(x); // ERROR: 'x' haigone kushandiswa sechinhu chinogara chiripo

  • Mikana yekushandisa constexpr ine chaiwo mabasa ("constexpr virtual int f () const {kudzoka 2; }").
  • Muraibhurari yakajairwa:
    • Yakawedzerwa rutsigiro rwemhando ye char8_t yeUTF-8 tambo.
    • Yakawedzera musoro mafaera bit (bit mashandiro) uye vhezheni.
    • Izvozvi zvinogoneka kutarisa prefix uye suffix yetambo (inotanga_ne, inopera_ne).
    • Yakawedzerwa std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible uye std::type_identity maitiro.
    • Akawedzera mabasa std::midpoint, std::lerp, std::bind_front, std::source_location, std::shanya, std::is_constant_evaluated uye std::assume_aligned.
    • Yakawedzera rutsigiro rwe arrays kune std::make_shared.
    • Yakawedzera std ::ku_array basa rekushandura mutsara-senge zvinhu kuita std :: array.
  • Zvimwe zviri nyore enumeration syntax:

    enum class rgba_color_channel {tsvuku, girini, bhuruu, alpha};

    std::string_view to_string(rgba_color_channel my_channel) {
    chinja (my_channel) {
    uchishandisa enum rgba_color_channel;
    nyaya yakatsvuka: dzoka "tsvuku";
    kesi yakasvibirira: dzoka "girinhi";
    kesi yebhuruu: dzoka "bhuruu";
    case alpha: dzoka "alpha";
    }
    }

  • Mune indexes, nekuda kwemaitiro asina kutsanangurwa, kushandiswa kwekushanda "," ("a[b,c]") kunorambidzwa. Tsigiro yeakawanda maoperation ane zvinosiyana zvakaziviswa nezwi rakakosha rakamiswa, kusanganisira "++" uye "-" mashandiro ane marudzi akajairwa.
  • Yakaderedzwa huwandu hwemamiriro ekuti "typename" inodiwa kuratidza kuvepo kwerudzi.

Source: opennet.ru

Voeg