ИСО комитет за стандардизацију језика Ц++ Међународни стандард "„. Могућности представљене у спецификацији, са изузетком изолованих случајева, у компајлерима , и . У оквиру пројекта имплементиране су стандардне библиотеке које подржавају Ц++20 .
У наредна два месеца одобрена спецификација ће бити у фази припреме документа за објављивање, на којој ће се радити на уређивачкој исправци правописних и штампарских грешака. Почетком новембра, резултујући документ ће бити послат ИСО-у на објављивање под формалним називом ИСО/ИЕЦ 14882:2020. У међувремену, комитет је већ започео рад на следећем стандарду Ц++23 (Ц++2б) и размотриће могуће опције на свом следећем виртуелном састанку. .
():
- Додати су „концепти“, проширења шаблона, која вам омогућавају да дефинишете скуп захтева параметара шаблона који, у време компајлирања, ограничавају скуп аргумената који се могу прихватити као параметри шаблона. Концепти се могу користити да би се избегле логичке недоследности између својстава типова података који се користе у оквиру шаблона и својстава типа података улазних параметара.
шаблон
концепт ЈеднакостУпоредиви = захтева(Т а, Т б) {
{ а == б } -> стд::боолеан;
{ а != б } -> стд::боолеан;
}; - Прихваћено за рад са модулима који се могу користити уместо датотека заглавља. Модули пружају нови начин организовања изворног кода на основу дефинисања граница компоненти, без укључивања датотека заглавља преко „#инцлуде“.
- Макро __ВА_ОПТ__ за прилагодљиво проширење променљивих макроа у зависности од присуства токена у аргументу променљиве.
- Подршка за оператор "" за тросмерно поређење.
- Подршка за подразумеване иницијализаторе елемената за битна поља.
- Способност ламбда хватања израза "*тхис".
струцт инт_валуе {
инт н = 0;
ауто геттер_фн() {
//ЛОШЕ:
// ретурн [=]() { ретурн н; };// ДОБРО:
ретурн [=, *тхис]() { ретурн н; };
}
}; - Позивање елемената показивачем (Поинтер-то-мембер), коришћењем показивача на привремене објекте дефинисане кроз „цонст &“ израз.
- Оператор брисања са деструктором описаним у документу .
- Класама је дозвољено да користе параметре шаблона без типа.
струцт фоо {
фоо() = подразумевано;
цонстекпр фоо(инт) {}
};шаблон
ауто гет_фоо() {
ретурн ф;
}гет_фоо(); // користи имплицитни конструктор
гет_фоо (); - Нетрајни ламбда изрази са конструктором.
- Омогућавање синтаксе шаблона за ламбда изразе („ауто ф = [] (стд::вектор в)").
- Могућност коришћења стринг литерала у параметрима шаблона.
- Подршка за синтаксу иницијализације у стилу Ц – поља која нису експлицитно наведена на листи иницијализације се подразумевано иницијализују.
структура А {
инт к;
инт и;
инт з = 123;
};А а {.к = 1, .з = 2}; // ак == 1, аи == 0, аз == 2
- Подршка за празне чланове структуре података.
- Подршка за вероватне и мало вероватне атрибуте који информишу оптимизатора о вероватноћи покретања условне конструкције („[[вероватно]] ако (случајно > 0) {“).
- Могућност коришћења опсега за иницијализацију вредности променљивих у „фор“ петљи
фор (ауто в = стд::вецтор{1, 2, 3}; ауто& е : в) {
- Аутоматско израчунавање величине низа у новом (“нев доубле[]{1,2,3}”);
- Атрибут „[[но_уникуе_аддресс]]“ у коме променљиве без података не заузимају простор.
- Атомски показивачи (стд::атомиц > и стд::атомиц >).
- Способност позивања виртуелних функција у условним изразима.
- Подршка за тренутне функције које могу да раде само са константама.
цонстевал инт скр(инт н) {
ретурн н * н;
}цонстекпр инт р = скр(100); // ОК
инт к = 100;
инт р2 = скр(к); // ГРЕШКА: 'к' се не може користити као константа - Могућност коришћења цонстекпр са виртуелним функцијама (“цонстекпр виртуал инт ф() цонст { ретурн 2; }”).
- У стандардној библиотеци:
- Додата подршка за тип цхар8_т за УТФ-8 стрингове.
- Додати бит датотека заглавља (битне операције) и верзија.
- Сада је могуће проверити префикс и суфикс стрингова (почиње_са, завршава_са).
- Додате особине стд::ремове_цвреф, стд::унврап_референце, стд::унврап_децаи_реф, стд::ис_нотхров_цонвертибле и стд::типе_идентити.
- Додате функције стд::мидпоинт, стд::лерп, стд::бинд_фронт, стд::соурце_лоцатион, стд::висит, стд::ис_цонстант_евалуатед и стд::ассуме_алигнед.
- Додата подршка за низове у стд::маке_схаред.
- Додата функција стд::то_арраи за претварање објеката налик низу у стд::арраи.
- Погоднија синтакса набрајања:
енум цласс ргба_цолор_цханнел {црвена, зелена, плава, алфа};
стд::стринг_виев то_стринг(ргба_цолор_цханнел мој_канал) {
прекидач (мој_канал) {
користећи енум ргба_цолор_цханнел;
случај црвено: врати "црвено";
цасе зелено: повратак "зелено";
цасе блуе: повратак "плаво";
цасе алпха: повратак "алфа";
}
} - У индексима, због недефинисаног понашања, употреба операције “,” (“а[б,ц]”) је забрањена. Подршка за већину операција са променљивим декларисаним кључном речи волатиле је укинута, укључујући операције „++“ и „—“ са стандардним типовима.
- Смањен је број ситуација у којима је потребно „име типа“ да укаже на присуство типа.
Извор: опеннет.ру
