C++ keele standardimise ISO komitee rahvusvaheline standard ââ. Spetsifikatsioonis esitatud vĂ”imalused, vĂ€lja arvatud ĂŒksikud juhtumid, on kompilaatorites , ja . C++20 standardile vastavad raamatukogud on teostatud projekti raames .
JĂ€rgmised kaks kuud kehtiv spetsifikatsioon on dokumentatsiooni avaldamise ettevalmistamise etapis, kus teostatakse Ă”igekirjakontrolli ja trĂŒkivigu. Novembri alguses saadetakse lĂ”plik dokument ISO-le avaldamiseks ametliku nimega ISO/IEC 14882:2020. Samal ajal on komitee juba alustanud tööd jĂ€rgmise standardi C++23 (C++2b) kallal ja lĂ€hiajal toimuvatel virtuaalsetel koosolekutel arutatakse vĂ”imalikke .
():
- Lisatud on âkontseptsioonidâ, mallide laiendamine, mis vĂ”imaldab mÀÀrata malliparameetrite nĂ”uete komplekti, mis kompileerimise ajal piirab argumentide komplekti, mida saab malliparameetritena kasutada. Kontseptsioone saab rakendada loogiliste vastuolude vĂ€ltimiseks andmetĂŒĂŒpide omaduste vahel, mida kasutatakse mallis ja sisendparameetrite andmetĂŒĂŒpide omaduste vahel.
template<typename T>
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - Komplekti kuuluvad moodulid, mida saab kasutada pealkirjafailide asemel. Moodulid pakuvad uut viisi lĂ€htekoodi korraldamiseks, tuginedes komponentide piiride mÀÀratlemisele, ilma et oleks vaja siduda pealkirjafailide kaudu â#includeâ.
- Makse __VA_OPT__ adaptiivsete variatiivsete makrode avamiseks sÔltuvalt tokenite olemasolust variatiivses argumendis.
- Tugiteenuse ââ kolmanda osapoole vĂ”rdlemiseks.
- Tugi vaikimisi algvÀÀrtustamiseks bitivÀli.
- VĂ”ime lambda-siduda vĂ€ljendeid â*thisâ.
struct int_value {
int n = 0;
auto getter_fn() {
// BAD:
// return [=]() { return n; };// GOOD:
return [=, *this]() { return n; };
}
}; - Elemendi kutsumine liikmesettevÔtte kaudu, kasutades vÀljendiga «const &» mÀÀratud ajutiste objektide nÀitajaid.
- Kustutamisteguri operaatormoodul koos hÀvitajaga, nagu on kirjeldatud dokumendis. .
- Klassidele on lubatud kasutada tĂŒĂŒpi mitte mÀÀratletud malliparametreid.
struct foo {
foo() = default;
constexpr foo(int) {}
};template
auto get_foo() {
return f;
}get_foo(); // kasutab kaudset konstruktoreid
get_foo(); - MÀletamatud lambda-vÀljendid konstruktoriga.
- Mallide sĂŒntaksi kasutamise lubamine lambda-vĂ€ljendites («auto f = [](std::vector v)»).
- Mugavus stringi literalide kasutamisel malliparametrites.
- C-stiilis algatamise sĂŒntaksi toimetamine â selgesĂ”naliselt mitte loetletud initsialiseerimise vĂ€li algatatakse vaikimisi.
struct A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
- TĂŒhi andmestruktuuri liikmete toimetamine.
- Atribuutide likely ja unlikely toimetamine, et teavitada optimeerijat koondumise tÔenÀosusest ('[[likely]] if (random > 0) {').
- Vahemike kasutamise mugavus muutuva vÀÀrtuse algatamiseks 'for' tsĂŒklis.
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- Massi automaatne arvutamine new (ânew double[]{1,2,3}â);
- Atribuut â[[no_unique_address]]â, mille puhul andmeid mitte sisaldavad muutujad ei vĂ”ta ruumi.
- Aatomilised nÀidikud (std::atomic<shared_ptr<T>> ja std::atomic<weak_ptr<T>>).
- VÔimalus kutsuda vÀlja virtuaalseid funktsioone tingimuslike vÀljendite sees.
- Toetatakse kiireid (immediate) funktsioone, mis saavad töötada ainult konstantidega.
consteval int sqr(int n) {
return n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // VIGA: 'x' ei saa kasutada konstantina - VĂ”imalus kasutada constexpr koos virtuaalfunktsioonidega (âconstexpr virtual int f() const { return 2; }â).
- Standardraamatukogus:
- Lisatud support char8_t tĂŒĂŒpi UTF-8 stringide jaoks.
- Lisatud pÀiste failid bit (bitite tegevused) ja version.
- Tekkinud on vÔimalus kontrollida stringide prefikseid ja sufikseid (starts_with, ends_with).
- Lisatud tĂŒpiseerijad std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ja std::type_identity.
- Lisatud funktsioonid std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated ja std::assume_aligned.
- std::make_shared-s lisatud massiivide toetus.
- Lisatud funktsioon std::to_array sarnaste objektide muutmiseks std::array-ks.
- Mugavam sĂŒntaks enumite jaoks:
enum class rgba_color_channel { punane, roheline, sinine, alfa };
std::string_view to_string(rgba_color_channel minu_kanal) {
switch (minu_kanal) {
using enum rgba_color_channel;
case punane: return «punane»;
case roheline: return «roheline»;
case sinine: return «sinine»;
case alfa: return «alfa»;
}
} - Indeksite puhul on use of operation «,» (a[b,c]) keelatud mÀÀramatuse tĂ”ttu. Enamik muutujaid, mis on deklareeritud vĂ”ti sĂ”naga volatile, ei toeta enam operatsioone, sealhulgas on keelatud operatsioonid «++» ja «â» tavaliste tĂŒĂŒpidega.
- VĂ€hendatud olukordade arvu, kus on vajalik «typename» kasutamine tĂŒĂŒbi olemasolu mĂ€rkimiseks.
Allikas: opennet.ru
