ISO կոմիտեն C++ լեզվի ստանդարտացման համար միջազգային ստանդարտ ««. Մեկնաբանված չափորոշիչի հնարավորությունները, բացի մի քանի դեպքերից, կոմպիլատորներում , և . C++20 ստանդարտ գրադարանները իրականացված են .
Ըստ հաստատված չափորոշիչի, հաջորդ երկու ամիսների ընթացքում փաստաթուղթը կպաշտպանի հրապարակման պատրաստման փուլում, որի ընթացքում կկատարվի ուղղագրական և տպագրական սխալների խմբագրություն: Նոյեմբերի սկզբին արդյունքային փաստաթուղթը կուղարկվի ISO՝ պաշտոնական անվանմամբ ISO/IEC 14882:2020: Մինչ այդ, կոմիտեն արդեն սկսել է աշխատել C++23 (C++2b) հաջորդ ստանդարտի վրա և մոտակայում վիրտուալ նիստում կքննարկվի հնարավոր .
():
- Ավելացված են «հասկացություն» հասկացությունները, որոնք ընդլայնում են ձևանմուշները և թույլ են տալիս սահմանել պահանջների հավաքածու ձևանմուշի պարամետրերին, որոնք ժամանակին սահմանափակում են դրանց փոխանցված արգումենտների հավաքածուն: Հասկացություններն օգտագործվում են մտաել մեր տեղեկություններում օգտագործվող տվյալների տեսակների հատկությունների միջև հարցադրումների խուսափելու համար:
template
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - ընդգրկված են մոդուլների հետ աշխատելու համար, որոնք կարող են օգտագործվել տեղադրանքների սովորական ֆայլերի փոխարեն: Մոդուլներն ապահովում են նոր եղանակի աղբյուրային տեքստերի կազմակերպման վրա, հիմնված բաղադրիչների սահմանների սահմանման վրա առանց «#include» ֆայլերի:
- __VA_OPT__ մակրո տարբերակիչների հարմարեցման համար:
- Երրորդ կողմի համեմատության օպերատորի փոխ աջակցություն:
- Զարգացման սկզբնաղբյուրների տարրերի առարկաների աջակցություն:
- Լամբդա-խաղաղացման «*this» արտահայտություններ:
struct int_value {
int n = 0;
auto getter_fn() {
// BAD:
// return [=]() { return n; };// GOOD:
return [=, *this]() { return n; };
}
}; - Թղթերի միջոցով ցուցադրողների որոնում (Pointer-to-member), օգտագործելով «const &» արտահայտությունների միջոցով սահմանված մատչելիության ցուցադրողներին:
- Delete օպերատոր, որը դեստրուկտոր ունի, ըստ .
- Դասերին թույլատրվում է առանց տիպի պարամետրերի օգտագործում:
struct foo {
foo() = default;
constexpr foo(int) {}
};template
auto get_foo() {
return f;
}get_foo(); // օգտագործում է թաքնված կոնստրուկտորը
get_foo(); - Չպահվող լամբդա-իմաստներ կոնստրուկտորով:
- Լամբդա-իմաստինների սինտաքսում օգտագործման հնարավորությունը՝ (auto f = [](std::vector v)):
- Ստրինգի բառն աճել լամբդա-իմաստների պարամետրերում:
- Աջակցություն C-ամսաթերթի սինտաքսին՝ ակներևորեն դեռևս չաստղավորված ձևով արտահայտությունները, նախանշվում են նախօրոք:
struct A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
- Աջակցություն դատարկ տվյալների անդամներին:
- likely և unlikely ատրիբուտների աջակցություն, օրինակ, условная конструкция («[[likely]] if (random > 0) {«).
- for ցիկլում փոփոխականների արժեքների ևнициализацияի համար диапазոնների օգտագործման հնարավորությունը
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- array-ի չափի ավտոմատ հաշվարկում new («new double[]{1,2,3}»);
- «[[no_unique_address]]» ատրիբուտ, որի դեպքում առանց տվյալների փոփոխականները չվերադարձնում են տարածք:
- Ատոմար ցուցակներ (std::atomic<shared_ptr> և std::atomic<weak_ptr>).
- Վիրտուալ ֆունկցիաների կանչելու հնարավորություն պայմանական արտահայտություններում:
- Արագ (immediate) ֆունկցիաների աջակցություն, որոնք աշխատանքն իրականացրու միայն կոնստանտների հետ:
consteval int sqr(int n) {
return n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // ERROR: ‘x’ չի կարող օգտագործվել որպես կոնստանտ - constexpr կիրառման հնարավորություն վիրտուալ ֆունկցիաների հետ («constexpr virtual int f() const { return 2; }»).
- Ստանդարտ գրադարանը:
- Ավելացվել է char8_t տիպի աջակցությունը UTF-8 շարքերի համար.
- Ավելացվել են bit (բիթային գործողություններ) և version գրապահոցները.
- Ստացվել է ստուգելու հնարավորությունը տողերի նախնական և վերջնական ափսեների համար (starts_with, ends_with).
- Ավելացվել են 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 ֆունկցիան, որը նմանեցնում է массива objects-ը std::array-ին.
- Լիարժեք ավելի հարմար enumerations սինտակս:
enum class rgba_color_channel { red, green, blue, alpha };
std::string_view to_string(rgba_color_channel my_channel) {
switch (my_channel) {
using enum rgba_color_channel;
case red: return «red»;
case green: return «green»;
case blue: return «blue»;
case alpha: return «alpha»;
}
} - Ինդեքսներում անորոշ վարքի պատճառով արգելվում է «,» գործողության օգտագործումը («a[b,c]»). արգելվել են volatile ստանդարտ տիպերով հայտարարված փոփոխականներով մեծամիտների մեջ շատ операций:
- Կրճատվել է այն իրավիճակների թիվը, որոնց անհրաժեշտ է նշել «typename» իսկ տիպի առկայությունը տեղեկացնելու համար.
Ընտանիք: opennet.ru
