Стандарти C++20 тасдиқ карда шудааст

Кумитаи ISO оид ба стандартизатсияи забони C++ тасдик кард стандарти байналмилалӣ"C ++ 20". Имкониятҳое, ки дар мушаххасот пешниҳод шудаанд, ба истиснои ҳолатҳои алоҳида, дастгирй карда мешавад дар компиляторхо GCC, Занг и Microsoft Visual C ++. Дар доираи лоиҳа китобхонаҳои стандартии дастгирӣкунандаи C++ 20 амалӣ карда мешаванд баландшавӣ.

Дар ду моҳи оянда мушаххасоти тасдиқшуда дар марҳилаи омодасозии ҳуҷҷат барои чоп қарор дошта, дар он корҳо оид ба ислоҳи таҳририи хатоҳои имлоӣ ва хатогиҳо анҷом дода мешаванд. Дар аввали ноябр, ҳуҷҷати натиҷавӣ ба ISO барои нашр бо номи расмии ISO/IEC 14882:2020 фиристода мешавад. Дар ҳамин ҳол, кумита аллакай ба кор дар стандарти навбатии C++ 23 (C++2b) шурӯъ кардааст ва дар ҷаласаи навбатии виртуалии худ имконоти имконпазирро баррасӣ хоҳад кард. навовариҳо.

асосӣ хусусиятҳо C ++ 20 (мисолҳои код):

  • Иловашудаи "консепсияҳо", васеъшавии шаблонҳо, ки ба шумо имкон медиҳанд, ки маҷмӯи талаботи параметрҳои шаблонро муайян кунед, ки дар вақти тартиб додани маҷмӯи аргументҳое, ки ҳамчун параметрҳои қолабӣ қабул карда мешаванд, маҳдуд мекунанд. Мафҳумҳоро барои пешгирӣ кардани номутобиқатии мантиқӣ байни хосиятҳои намудҳои додаҳои дар қолаб истифодашаванда ва хосиятҳои навъи додаҳои параметрҳои вуруд истифода бурдан мумкин аст.

    шаблон
    консепсияи баробарӣ муқоисашаванда = талаб мекунад (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • Қабул карда шудааст васеъкунӣ барои кор бо модулҳое, ки метавонанд ба ҷои файлҳои сарлавҳа истифода шаванд. Модулҳо роҳи нави ташкили коди ибтидоиро дар асоси муайян кардани ҳудуди ҷузъҳо бидуни дохил кардани файлҳои сарлавҳа тавассути "#include" таъмин мекунанд.
  • Макрос __VA_OPT__ барои тавсеаи мутобиқшавии макросҳои тағирёбанда вобаста ба мавҷудияти нишонаҳо дар аргументи тағирёбанда.
  • Дастгирии оператори "" барои муқоисаи сеҷониба.
  • Дастгирии ибтидоии унсурҳои пешфарз барои битфилдҳо.
  • Қобилияти гирифтани лямбда ифодаҳои "*ин".

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //БАД:
    // баргардонидани [=]() { баргардонидани n; };

    // ХУБ:
    бозгаштан [=, *ин]() { баргардонидани n; };
    }
    };

  • Даъвати унсурҳо аз рӯи нишоннамо (Номанда-ба-узв), бо истифода аз ишораҳо ба объектҳои муваққатӣ, ки тавассути ифодаи “const &” муайян карда мешаванд.
  • Оператори несткунӣ бо вайронкунандае, ки дар ҳуҷҷат тавсиф шудааст P0722R1.
  • Ба синфҳо иҷозат дода мешавад, ки параметрҳои шаблонро бидуни намуд истифода баранд.

    struct foo {
    foo() = пешфарз;
    constexpr foo(int) {}
    };

    шаблон
    auto get_foo() {
    бозгашт f;
    }

    get_foo(); // созандаи номуайянро истифода мебарад
    get_foo ();

  • Ифодаҳои ламбдаҳои доимӣ бо созанда.
  • Иҷозат додани синтаксиси шаблон барои ифодаҳои лямбда ("auto f = [] (std::вектор v)").
  • Имконияти истифодаи сатри литерал дар параметрҳои шаблон.
  • Дастгирии синтаксиси ибтидоии услуби C - майдонҳое, ки дар рӯйхати оғозёбӣ ба таври возеҳ номбар нашудаанд, бо нобаёнӣ оғоз карда мешаванд.

    сохтори A {
    intx;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // ax == 1, ай == 0, аз == 2

  • Дастгирии аъзои сохтори маълумоти холӣ.
  • Дастгирии атрибутҳои эҳтимолӣ ва эҳтимолӣ барои огоҳ кардани оптимизатор дар бораи эҳтимолияти эҷоди конструксияи шартӣ (“[[эҳтимолан]] агар (тасодуфӣ > 0) {“).
  • Имконияти истифодаи диапазонҳо барои оғоз кардани арзишҳои тағирёбанда дар даври "барои"

    барои (авто v = std::вектор{1, 2, 3}; auto& e : v) {

  • Ҳисобкунии худкори андозаи массив дар нав (“нав дукарата[]{1,2,3}”);
  • Аттрибути "[[no_unique_address]]", ки дар он тағирёбандаҳо бе маълумот ҷой намегиранд.
  • Нишондиҳандаҳои атомӣ (std::atomic > ва std::atomic >).
  • Имконияти даъват кардани функсияҳои виртуалӣ дар ифодаҳои шартӣ.
  • Дастгирии функсияҳои фаврӣ, ки танҳо бо доимӣ кор карда метавонанд.

    consteval int sqr(int n) {
    баргардонидани n * n;
    }

    constexpr int r = sqr (100); // ДУРУСТ
    int x = 100;
    int r2 = sqr(x); // ХАТО: 'x' ҳамчун доимӣ истифода намешавад

  • Имконияти истифодаи constexpr бо функсияҳои виртуалӣ (“constexpr virtual int f() const { return 2; }”).
  • Дар китобхонаи стандартӣ:
    • Дастгирии иловагӣ барои навъи char8_t барои сатрҳои UTF-8.
    • Файлҳои сарлавҳаи бит (амалҳои бит) ва версияи иловашуда.
    • Акнун имкон дорад, ки префикс ва суффикси сатрҳоро тафтиш кунед (бо оғоз_бо, анҷом_бо).
    • std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ва std::type_identity хислатҳои иловашуда.
    • Функсияҳои иловашуда std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated ва std::assume_aligned.
    • Дастгирии массивҳо ба std::make_shared илова карда шуд.
    • Функсияи std::to_array барои табдил додани объектҳои ба массив монанд ба std::array иловашуда.
  • Синтаксиси барӯйхатгирии қулайтар:

    синфи enum rgba_color_channel {сурх, сабз, кабуд, алфа};

    std :: string_view to_string(rgba_color_channel_channel ман) {
    гузариш (канали ман) {
    бо истифода аз enum rgba_color_channel;
    ҳолати сурх: баргардонидани "сурх";
    ҳолати сабз: баргардонидани "сабз";
    ҳолати кабуд: баргардонидани "кабуд";
    ҳолати алфа: баргардонидани "алфа";
    }
    }

  • Дар индексҳо аз сабаби рафтори номуайян, истифодаи амалиёти “,” (“a[b,c]”) манъ аст. Дастгирии аксари амалиётҳо бо тағирёбандаҳое, ки бо калимаи калидӣ эълон шудаанд, қатъ карда шуд, аз ҷумла амалиёти “++” ва “—” бо намудҳои стандартӣ.
  • Шумораи ҳолатҳое, ки дар онҳо "намуд" барои нишон додани мавҷудияти намуд зарур аст, кам карда шуд.

Манбаъ: opennet.ru

Илова Эзоҳ