Одобрен стандард Ц++20

ИСО комитет за стандардизацију језика Ц++ одобрено Међународни стандард "Ц ++ 20„. Могућности представљене у спецификацији, са изузетком изолованих случајева, подржан у компајлерима ГЦЦ, Цланг и Мицрософт Висуал Ц ++. У оквиру пројекта имплементиране су стандардне библиотеке које подржавају Ц++20 Појачати.

У наредна два месеца одобрена спецификација ће бити у фази припреме документа за објављивање, на којој ће се радити на уређивачкој исправци правописних и штампарских грешака. Почетком новембра, резултујући документ ће бити послат ИСО-у на објављивање под формалним називом ИСО/ИЕЦ 14882:2020. У међувремену, комитет је већ започео рад на следећем стандарду Ц++23 (Ц++2б) и размотриће могуће опције на свом следећем виртуелном састанку. иновације.

Главни Карактеристике Ц ++ 20 (примери кода):

  • Додати су „концепти“, проширења шаблона, која вам омогућавају да дефинишете скуп захтева параметара шаблона који, у време компајлирања, ограничавају скуп аргумената који се могу прихватити као параметри шаблона. Концепти се могу користити да би се избегле логичке недоследности између својстава типова података који се користе у оквиру шаблона и својстава типа података улазних параметара.

    шаблон
    концепт ЈеднакостУпоредиви = захтева(Т а, Т б) {
    { а == б } -> стд::боолеан;
    { а != б } -> стд::боолеан;
    };

  • Прихваћено експанзија за рад са модулима који се могу користити уместо датотека заглавља. Модули пружају нови начин организовања изворног кода на основу дефинисања граница компоненти, без укључивања датотека заглавља преко „#инцлуде“.
  • Макро __ВА_ОПТ__ за прилагодљиво проширење променљивих макроа у зависности од присуства токена у аргументу променљиве.
  • Подршка за оператор "" за тросмерно поређење.
  • Подршка за подразумеване иницијализаторе елемената за битна поља.
  • Способност ламбда хватања израза "*тхис".

    струцт инт_валуе {
    инт н = 0;
    ауто геттер_фн() {
    //ЛОШЕ:
    // ретурн [=]() { ретурн н; };

    // ДОБРО:
    ретурн [=, *тхис]() { ретурн н; };
    }
    };

  • Позивање елемената показивачем (Поинтер-то-мембер), коришћењем показивача на привремене објекте дефинисане кроз „цонст &“ израз.
  • Оператор брисања са деструктором описаним у документу П0722Р1.
  • Класама је дозвољено да користе параметре шаблона без типа.

    струцт фоо {
    фоо() = подразумевано;
    цонстекпр фоо(инт) {}
    };

    шаблон
    ауто гет_фоо() {
    ретурн ф;
    }

    гет_фоо(); // користи имплицитни конструктор
    гет_фоо ();

  • Нетрајни ламбда изрази са конструктором.
  • Омогућавање синтаксе шаблона за ламбда изразе („ауто ф = [] (стд::вектор в)").
  • Могућност коришћења стринг литерала у параметрима шаблона.
  • Подршка за синтаксу иницијализације у стилу Ц – поља која нису експлицитно наведена на листи иницијализације се подразумевано иницијализују.

    структура А {
    инт к;
    инт и;
    инт з = 123;
    };

    А а {.к = 1, .з = 2}; // ак == 1, аи == 0, аз == 2

  • Подршка за празне чланове структуре података.
  • Подршка за вероватне и мало вероватне атрибуте који информишу оптимизатора о вероватноћи покретања условне конструкције („[[вероватно]] ако (случајно > 0) {“).
  • Могућност коришћења опсега за иницијализацију вредности променљивих у „фор“ петљи

    фор (ауто в = стд::вецтор{1, 2, 3}; ауто& е : в) {

  • Аутоматско израчунавање величине низа у новом (“нев доубле[]{1,2,3}”);
  • Атрибут „[[но_уникуе_аддресс]]“ у коме променљиве без података не заузимају простор.
  • Атомски показивачи (стд::атомиц > и стд::атомиц >).
  • Способност позивања виртуелних функција у условним изразима.
  • Подршка за тренутне функције које могу да раде само са константама.

    цонстевал инт скр(инт н) {
    ретурн н * н;
    }

    цонстекпр инт р = скр(100); // ОК
    инт к = 100;
    инт р2 = скр(к); // ГРЕШКА: 'к' се не може користити као константа

  • Могућност коришћења цонстекпр са виртуелним функцијама (“цонстекпр виртуал инт ф() цонст { ретурн 2; }”).
  • У стандардној библиотеци:
    • Додата подршка за тип цхар8_т за УТФ-8 стрингове.
    • Додати бит датотека заглавља (битне операције) и верзија.
    • Сада је могуће проверити префикс и суфикс стрингова (почиње_са, завршава_са).
    • Додате особине стд::ремове_цвреф, стд::унврап_референце, стд::унврап_децаи_реф, стд::ис_нотхров_цонвертибле и стд::типе_идентити.
    • Додате функције стд::мидпоинт, стд::лерп, стд::бинд_фронт, стд::соурце_лоцатион, стд::висит, стд::ис_цонстант_евалуатед и стд::ассуме_алигнед.
    • Додата подршка за низове у стд::маке_схаред.
    • Додата функција стд::то_арраи за претварање објеката налик низу у стд::арраи.
  • Погоднија синтакса набрајања:

    енум цласс ргба_цолор_цханнел {црвена, зелена, плава, алфа};

    стд::стринг_виев то_стринг(ргба_цолор_цханнел мој_канал) {
    прекидач (мој_канал) {
    користећи енум ргба_цолор_цханнел;
    случај црвено: врати "црвено";
    цасе зелено: повратак "зелено";
    цасе блуе: повратак "плаво";
    цасе алпха: повратак "алфа";
    }
    }

  • У индексима, због недефинисаног понашања, употреба операције “,” (“а[б,ц]”) је забрањена. Подршка за већину операција са променљивим декларисаним кључном речи волатиле је укинута, укључујући операције „++“ и „—“ са стандардним типовима.
  • Смањен је број ситуација у којима је потребно „име типа“ да укаже на присуство типа.

Извор: опеннет.ру

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster