An amince da ma'aunin C++20

Kwamitin ISO kan Daidaita Harshen C ++ yarda Standard Standard"C ++ 20". Ƙarfin da aka gabatar a cikin ƙayyadaddun bayanai, ban da keɓantattun lokuta, goyan bayan a cikin masu tarawa GCC, Yin magana и Microsoft Visual C ++. Ana aiwatar da daidaitattun ɗakunan karatu masu tallafawa C++20 a cikin aikin Boost.

A cikin watanni biyu masu zuwa, ƙayyadaddun da aka amince da su za su kasance a matakin shirya takaddar don bugawa, inda za a gudanar da aikin gyara kurakuran rubutu da rubutu. A farkon Nuwamba, za a aika da daftarin aiki zuwa ISO don bugawa a ƙarƙashin sunan hukuma ISO/IEC 14882:2020. A halin yanzu, kwamitin ya riga ya fara aiki akan ma'aunin C++23 na gaba (C++2b) kuma zai yi la'akari da zaɓuɓɓukan zaɓuɓɓuka a taron sa na gaba na gaba. sababbin abubuwa.

Main fasali C ++ 20 (misali code):

  • An ƙara "ra'ayoyi", kari na samfuri, waɗanda ke ba ku damar ayyana saitin abubuwan buƙatun samfuri waɗanda, a lokacin haɗawa, iyakance saitin gardama waɗanda za a iya karɓa azaman sigogin samfuri. Za a iya amfani da ra'ayoyin don guje wa rashin daidaiton ma'ana tsakanin kaddarorin nau'ikan bayanan da aka yi amfani da su a cikin samfuri da nau'in bayanan bayanan sigogin shigarwa.

    samfuri
    ra'ayi EqualityComparable = buƙatar (T a, T b) {
    {a == b } -> std :: boolean;
    {a!= b} -> std:: boolean;
    };

  • Karba fadada don aiki tare da kayayyaki waɗanda za a iya amfani da su maimakon fayilolin kai. Modules suna ba da sabuwar hanya don tsara lambar tushe dangane da ayyana iyakoki na abubuwan haɗin gwiwa, ba tare da haɗa fayilolin taken ta hanyar "#clude".
  • Macro __VA_OPT__ don daidaitawa na fadada macro masu canzawa dangane da kasancewar alamu a cikin mahawara mai canzawa.
  • Taimako ga ma'aikacin "" don kwatanta hanyoyi uku.
  • Goyon baya ga tsohowar abubuwan farko don bitfields.
  • Ikon kama lambda "*wannan" kalamai.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    // BA:
    // dawowa [=] () {dawo n; };

    // KYAU:
    dawowa [=, *wannan]() {dawo n; };
    }
    };

  • Abubuwan kira ta hanyar ma'ana (Mai nuna-zuwa-memba), ta amfani da masu nuni zuwa abubuwa na ɗan lokaci da aka ayyana ta hanyar "const &" magana.
  • Mai aikin sharewa tare da mai lalata da aka kwatanta a cikin takaddar Saukewa: P0722R1.
  • An ba da izinin azuzuwan yin amfani da sigogin samfuri ba tare da nau'i ba.

    tsarin foo {
    foo() = tsoho;
    constexpr foo(int) {}
    };

    samfuri
    auto get_foo() {
    dawo f;
    }

    samun_foo(); // yana amfani da maginin fayyace
    samun_foo ();

  • Maganganun lambda mara jurewa tare da mai gini.
  • Ba da izinin ƙirar samfuri don maganganun lambda ("auto f = [] (std:: vector v))).
  • Ability don amfani da kirtani na zahiri a cikin sigogin samfuri.
  • Taimako don tsarin haɗin farko na C-style - filayen da ba a jera su ba a cikin jerin farawa an fara su ta tsohuwa.

    tsarin A {
    ina x;.
    int y;
    int z = 123;
    };

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

  • Taimako ga membobin tsarin bayanan komai.
  • Taimakawa ga yuwuwar sifofin da ba za a iya yiwuwa ba don sanar da mai ingantawa game da yuwuwar haɓakar ginin yanayin (“[[mai yiwuwa]] idan (bazuwar> 0) {“).
  • Ikon amfani da jeri don fara ƙima masu canzawa a cikin madauki "don".

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

  • Lissafi ta atomatik na girman tsararru a cikin sabon ("sabon ninki biyu[]{1,2,3}");
  • Siffar "[no_unique_address]]" wanda masu canji ba tare da bayanai ba sa ɗaukar sarari.
  • Manufofin Atomic (std :: atomic > da std:: atomic >).
  • Ikon kiran ayyukan kama-da-wane a cikin maganganun sharadi.
  • Taimako don ayyuka na gaggawa waɗanda zasu iya aiki kawai tare da ma'auni.

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

    constexpr int r = sqr (100); // KO
    int x = 100;
    int r2 = sqr (x); // KUSKURE: 'x' ba za a iya amfani da shi azaman dindindin ba

  • Yiwuwar amfani da constexpr tare da ayyuka masu kama-da-wane ("constexpr kama-da-wane int f() const {komawa 2; }").
  • A cikin ma'auni na ɗakin karatu:
    • Ƙara tallafi don nau'in char8_t don igiyoyin UTF-8.
    • Ƙara fayilolin kai bit (ayyukan bit) da sigar.
    • Yanzu yana yiwuwa a duba prefix da kari na kirtani (farawa_da, ƙare_da).
    • Ƙara std :: cire_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible da std :: nau'in_identity halaye.
    • Ƙara ayyuka std :: midpoint, std :: lep, std :: bind_front, std :: source_location, std :: ziyara, std :: is_constant_evaluated da std :: ɗauka_aligned.
    • Ƙara tallafi don tsararraki zuwa std :: make_shared.
    • Ƙara std :: zuwa_array aiki don canza abubuwa masu kama da tsararru zuwa std :: array.
  • Ƙarin dacewa ga tsarin ƙidayar ƙididdiga:

    enum class rgba_color_channel {ja, kore, blue, alpha};

    std :: string_view to_string(rgba_color_channel my_channel) {
    canza (my_channel) {
    ta amfani da enum rgba_color_channel;
    case ja: mayar da "ja";
    harka kore: mayar da "kore";
    case blue: mayar da "blue";
    hali alpha: mayar da "alpha";
    }
    }

  • A cikin fihirisa, saboda halayen da ba a bayyana ba, an haramta amfani da aikin "," ("a[b,c]"). An daina goyan bayan mafi yawan ayyuka tare da masu canji da aka ayyana tare da maɓalli mai canzawa, gami da ayyukan "++" da "-" tare da daidaitattun nau'ikan.
  • Rage adadin yanayi a cikin abin da ake buƙatar "typename" don nuna kasancewar nau'in.

source: budenet.ru

Add a comment