ISO C++ լեզվի ստանդարտացման հանձնաժողով հաստատված միջազգային ստանդարտ»C ++ 20«. Հստակեցման մեջ ներկայացված հնարավորությունները, բացառությամբ առանձին դեպքերի, աջակցել է կոմպիլյատորներում GCC, Ngնգոց и Microsoft Visual C ++. Ծրագրի շրջանակներում ներդրված են ստանդարտ գրադարաններ, որոնք աջակցում են C++20-ին Բարձրացնել.
Առաջիկա երկու ամիսների ընթացքում հաստատված ճշգրտումը կլինի փաստաթղթի հրապարակման պատրաստման փուլում, որում աշխատանքներ կիրականացվեն ուղղագրական սխալների և տառասխալների խմբագրական ուղղման ուղղությամբ։ Նոյեմբերի սկզբին ստացված փաստաթուղթը կուղարկվի ISO՝ ISO/IEC 14882:2020 պաշտոնական անունով հրապարակման համար: Միևնույն ժամանակ, հանձնաժողովն արդեն սկսել է աշխատանքը հաջորդ C++23 ստանդարտի (C++2b) վրա և հնարավոր տարբերակները կքննարկի իր հաջորդ վիրտուալ հանդիպման ժամանակ։ նորամուծություններ.
Ավելացվել են «հասկացություններ», ձևանմուշների ընդլայնումներ, որոնք թույլ են տալիս սահմանել կաղապարի պարամետրերի պահանջների մի շարք, որոնք կոմպիլյացիայի ժամանակ սահմանափակում են արգումենտների շարքը, որոնք կարող են ընդունվել որպես կաղապարի պարամետրեր: Հասկացությունները կարող են օգտագործվել կաղապարում օգտագործվող տվյալների տեսակների հատկությունների և մուտքային պարամետրերի տվյալների տիպի հատկությունների միջև տրամաբանական անհամապատասխանություններից խուսափելու համար:
կաղապար
հասկացություն EqualityComparable = պահանջում է (T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
};
Ընդունված է ընդլայնումներ մոդուլների հետ աշխատելու համար, որոնք կարող են օգտագործվել վերնագրի ֆայլերի փոխարեն: Մոդուլներն ապահովում են աղբյուրի կոդը կազմակերպելու նոր եղանակ՝ հիմնված բաղադրիչների սահմանների սահմանման վրա՝ առանց վերնագրի ֆայլերի ներառման «#include» միջոցով:
Մակրո __VA_OPT__ փոփոխական մակրոների հարմարվողական ընդլայնման համար՝ կախված փոփոխական արգումենտում նշանների առկայությունից:
Աջակցություն «» օպերատորին եռակողմ համեմատության համար:
Աջակցություն լռելյայն տարրերի սկզբնավորիչներին բիթ դաշտերի համար:
Աջակցություն C ոճի սկզբնավորման շարահյուսությանը. սկզբնավորման ցուցակում հստակորեն չնշված դաշտերը սկզբնավորվում են լռելյայն:
կառուցվածք A {
intx;
int y;
int z = 123;
};
A a {.x = 1, .z = 2}; // կացին == 1, այ == 0, ազ == 2
Աջակցություն դատարկ տվյալների կառուցվածքի անդամներին:
Աջակցություն հավանական և անհավանական ատրիբուտներին՝ օպտիմիզատորին տեղեկացնելու պայմանական կառուցվածքի գործարկման հավանականության մասին («[[հավանական]], եթե (պատահական > 0) {»):
«for» հանգույցում փոփոխական արժեքները սկզբնավորելու համար միջակայքեր օգտագործելու ունակություն
համար (auto v = std::vector{1, 2, 3}; auto& e : v) {
Աջակցություն անմիջական գործառույթներին, որոնք կարող են աշխատել միայն հաստատուններով:
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 class rgba_color_channel {կարմիր, կանաչ, կապույտ, ալֆա };
std::string_view to_string(rgba_color_channel my_channel) {
անջատիչ (my_channel) {
օգտագործելով enum rgba_color_channel;
գործը կարմիր. վերադարձ «կարմիր»;
գործը կանաչ. վերադարձ «կանաչ»;
գործը կապույտ. վերադարձ «կապույտ»;
գործի ալֆա. վերադարձ «ալֆա»;
}
}
Ինդեքսներում, չսահմանված վարքագծի պատճառով, արգելվում է «,» («a[b,c]») գործողության օգտագործումը: Անկայուն հիմնաբառով հայտարարագրված փոփոխականներով գործողությունների մեծ մասի աջակցությունը դադարեցվել է, ներառյալ ստանդարտ տեսակներով «++» և «—» գործառնությունները:
Նվազեցրեց իրավիճակների քանակը, որոնցում «տիպի անունը» պահանջվում է տիպի առկայությունը նշելու համար: