Giaprobahan ang C++20 standard

ISO Committee on Standardization sa C++ Language giaprobahan internasyonal nga sumbanan"C ++ 20". Ang mga kapabilidad nga gipresentar sa detalye, gawas sa mga nahilit nga kaso, gisuportahan sa mga compiler GCC, clang и Microsoft Visual C ++. Ang mga standard nga librarya nga nagsuporta sa C++20 gipatuman sulod sa proyekto magtulud, magduso.

Sa sunod nga duha ka bulan, ang giaprobahan nga espesipikasyon naa sa yugto sa pag-andam sa dokumento alang sa pagmantala, diin ang trabaho himuon sa editoryal nga pagtul-id sa mga sayup sa spelling ug typo. Sa sayong bahin sa Nobyembre, ang resulta nga dokumento ipadala sa ISO alang sa pagmantala ubos sa pormal nga ngalan nga ISO/IEC 14882:2020. Sa kasamtangan, ang komite nagsugod na sa pagtrabaho sa sunod nga C++23 standard (C++2b) ug ikonsiderar ang posible nga mga kapilian sa sunod nga virtual meeting niini. mga inobasyon.

nag-unang Features C ++ 20 (mga pananglitan sa code):

  • Gidugang nga "mga konsepto", mga extension sa template, nga nagtugot kanimo sa paghubit sa usa ka hugpong sa mga kinahanglanon sa parameter sa template nga, sa oras sa pag-compile, limitahan ang hugpong sa mga argumento nga mahimong dawaton ingon mga parameter sa template. Ang mga konsepto mahimong gamiton aron malikayan ang lohikal nga pagkasumpaki tali sa mga kabtangan sa mga tipo sa datos nga gigamit sulod sa template ug sa tipo sa datos nga mga kabtangan sa mga parameter sa input.

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

  • Gidawat pagpalapad alang sa pagtrabaho sa mga module nga mahimong magamit imbes sa mga file sa header. Ang mga modulo naghatag og bag-ong paagi sa pag-organisar sa source code base sa pagtino sa mga utlanan sa mga component, nga walay paglakip sa mga file sa header pinaagi sa "#include".
  • Macro __VA_OPT__ para sa adaptive expansion sa variable macros depende sa presensya sa mga token sa variable nga argumento.
  • Suporta alang sa "" operator alang sa tulo ka paagi nga pagtandi.
  • Suporta para sa default element initializers para sa mga bitfield.
  • Abilidad sa lambda sa pagkuha sa "*nii" nga mga ekspresyon.

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

    // MAAYO:
    balik [=, *kini]() {balik n; };
    }
    };

  • Pagtawag sa mga elemento pinaagi sa pointer (Pointer-to-member), gamit ang mga pointer sa temporaryo nga mga butang nga gihubit pinaagi sa "const &" nga ekspresyon.
  • Ang delete operator nga adunay destructor nga gihulagway sa dokumento P0722R1.
  • Gitugotan ang mga klase sa paggamit sa mga parameter sa template nga wala’y tipo.

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

    template
    auto get_foo() {
    balik f;
    }

    get_foo(); // migamit ug implicit constructor
    get_foo ();

  • Dili-persistent nga mga ekspresyon sa lambda nga adunay constructor.
  • Gitugotan ang template syntax alang sa mga ekspresyon sa lambda ("auto f = [] (std::vector v)").
  • Abilidad sa paggamit sa mga literal nga string sa mga parameter sa template.
  • Suporta para sa C-style initialization syntax - ang mga field nga dili klaro nga nalista sa initialization list kay gi-initialize sa default.

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

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

  • Suporta alang sa walay sulod nga mga miyembro sa istruktura sa datos.
  • Suporta alang sa lagmit ug dili lagmit nga mga hiyas aron sa pagpahibalo sa optimizer mahitungod sa kalagmitan sa conditional construct nga na-trigger (“[[lagmit]] kon (random > 0) {“).
  • Abilidad sa paggamit sa mga han-ay aron masugdan ang variable values ​​sa usa ka "for" loop

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

  • Awtomatikong pagkalkula sa gidak-on sa array sa bag-o (“bag-ong doble []{1,2,3}”);
  • Ang “[[no_unique_address]]” nga attribute diin ang mga variable nga walay data dili mokuha ug luna.
  • Atomic pointers (std::atomic > ug std::atomic >).
  • Abilidad sa pagtawag sa mga virtual function sa conditional expressions.
  • Suporta alang sa diha-diha nga mga gimbuhaton nga mahimo lamang nga molihok sa mga kanunay.

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

    constexpr int r = sqr(100); // OK
    int x = 100;
    int r2 = sqr(x); // ERROR: 'x' dili mahimong gamiton isip usa ka kanunay

  • Posibilidad sa paggamit sa constexpr nga adunay mga virtual nga gimbuhaton ("constexpr virtual int f() const {balik 2; }").
  • Sa standard nga librarya:
    • Gidugang nga suporta para sa char8_t type para sa UTF-8 strings.
    • Gidugang ang mga file sa header bit (bit nga operasyon) ug bersyon.
    • Posible na nga susihon ang prefix ug suffix sa mga kuwerdas (starts_with, ends_with).
    • Gidugang std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ug std::type_identity traits.
    • Gidugang nga mga function std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated ug std::assume_aligned.
    • Gidugang nga suporta alang sa mga arrays sa std::make_shared.
    • Gidugang ang std::to_array function aron ma-convert ang mga butang nga sama sa array ngadto sa std::array.
  • Mas sayon ​​​​nga enumeration syntax:

    enum nga klase rgba_color_channel {pula, berde, asul, alpha};

    std::string_view to_string(rgba_color_channel my_channel) {
    switch (akong_channel) {
    gamit ang enum rgba_color_channel;
    kaso pula: ibalik ang "pula";
    kaso berde: ibalik ang "berde";
    asul nga kaso: ibalik ang "asul";
    kaso alpha: ibalik ang "alpha";
    }
    }

  • Sa mga indeks, tungod sa dili matino nga kinaiya, ang paggamit sa operasyon "," ("a[b,c]") gidili. Ang suporta alang sa kadaghanan sa mga operasyon nga adunay mga variable nga gideklarar nga adunay dali nga keyword gihunong, lakip ang "++" ug "—" nga mga operasyon nga adunay mga sumbanan nga tipo.
  • Gipakunhod ang gidaghanon sa mga sitwasyon diin ang "typename" gikinahanglan aron ipakita ang presensya sa usa ka tipo.

Source: opennet.ru

Idugang sa usa ka comment