ISO komitee C++ keele standardimiseks rahvusvaheline standard "". Spetsifikatsioonis esitatud vĂ”imalused, vĂ€lja arvatud ĂŒksikud juhud, kompilaatorites , ja . C++20 standardi toetavad raamatukogud on rakendatud projekti .
JĂ€rgmise kahe kuu jooksul kinnitatud spetsifikatsioon valmib dokumentide avaldamiseks, kus viiakse lĂ€bi toimetamisprotsess Ă”igekirja- ja trĂŒkivigade parandamiseks. Novembri alguses saadetakse lĂ”plik dokument ISO-le avaldamiseks formaalse nimega ISO/IEC 14882:2020. Samal ajal on komitee juba asunud tööle jĂ€rgmise standardi C++23 (C++2b) kallal ja lĂ€hitulevikus vaadatakse jĂ€rgmisi .
():
- Lisatud on "kontseptsioonid", mallide laiendused, mis vĂ”imaldavad mÀÀrata nĂ”uete kogumi malliparameetritele, mis kompileerimise ajal piiravad argumentide kogumit, mida saab malliparameetritena kasutada. Kontseptsioone saab kasutada, et vĂ€ltida loogilisi vastuolusid andmetĂŒĂŒpide omaduste vahel, mis on kasutusel mallis, ja sissetulevate parameetrite andmetĂŒĂŒpide omaduste vahel.
template
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - NÔutud on moodulite tööks, mida saab kasutada pealkirjafailide asemel. Moodulid pakuvad uut viisi lÀhtekoodide korraldamiseks, tuginedes komponentide piiride mÀÀratlemisele, ilma "#include" pealkirjafailide juurde sidumata.
- Maksu __VA_OPT__ adaptiivseks avamiseks variatiivsest makros sÔltuvalt variatiivsete argumentide kohalolekust.
- Toetust operaatorile "" kolmikvÔrdlemiseks.
- Toetatakse vaikeelementide initsialisaatoreid bitivÀljade jaoks.
- VÔimalus lambda-sidumisel vÀljendite "*this" kasutamiseks.
struct int_value {
int n = 0;
auto getter_fn() {
// BAD:
// return [=]() { return n; };// GOOD:
return [=, *this]() { return n; };
}
}; - Elementide kutsumine nÀitajate (Pointer-to-member) kaudu, kasutades "const &" kaudu mÀÀratud ajutiste objektide nÀitajaid.
- Destruktoriga delete operaator, nagu on kirjeldatud dokumendis .
- Klassidele on lubatud kasutada ilma tĂŒĂŒbita malliparameetreid.
struct foo {
foo() = default;
constexpr foo(int) {}
};template
auto get_foo() {
return f;
}get_foo(); // kasutab varjatud konstruktorit
get_foo(); - Mittekasutatavad lambda-vÀljendid konstruktoriga.
- Mallide sĂŒntaksi kasutamise lubatavus lambda-vĂ€ljendites («auto f = [<typename T>(std::vector<T> v)»).
- Stringliteraalide kasutamise vÔimalus malliparametrites.
- C-stiilis initsialiseerimise sĂŒntaksi tugi - nimetamata initsialiseerimisloendis olevad vĂ€ljad initsialiseeritakse 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ĂŒhjade andmestruktuuri liikmete tugi.
- Tugi atribuutidele likely ja unlikely, et informeerida optimeerijat tingimuslausete tÔenÀosuse kohta («[[likely]] if (random > 0) {«).
- Vahemike kasutamise vĂ”imalus muutujate vÀÀrtuste initsialiseerimiseks tsĂŒklis «for»
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- Massi suuruse automaatne arvutamine new-is («new double[]{1,2,3}»);
- Atribuut «[[no_unique_address]]», mille korral andmeid mitte sisaldavad muutujad ei vÔta ruumi.
- Atomilised nÀidikud (std::atomic<shared_ptr<T>> ja std::atomic<weak_ptr<T>>).
- Virtuaalsete funktsioonide kutsumise vÔimalus tingimuslausetes.
- Kiirete (immediate) funktsioonide tugi, mis vÔivad 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); // ERROR: 'x' ei saa kasutada konstandina - constexpr'i rakendamise vÔimalus virtuaalsetele funktsioonidele («constexpr virtual int f() const { return 2; }»).
- Standardraamatukogus:
- Lisatud tugi char8_t tĂŒĂŒbile UTF-8 stringide jaoks.
- Lisatud pÀisefailid bit (bitilised operatsioonid) ja version.
- Mugavuse huvides on now vÔimalik kontrollida stringide eelist ja suffikse (starts_with, ends_with).
- Lisatud tĂŒĂŒbihierarhiad 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_sharedis on lisatud toetus massiividele.
- Lisatud funktsioon std::to_array, et muuta massiivi sarnased objektid std::array-ks.
- Mugavam sĂŒntaks loetelude jaoks:
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»;
}
} - Indekstest on keelatud kasutada operatsiooni â,â (âa[b,c]â) mÀÀramatu kĂ€itumise tĂ”ttu. Tugi enamiku volatile mĂ€rksĂ”naga deklareeritud muutuja operatsioonide jaoks on lĂ”petatud, sealhulgas on keelatud operatsioonid â++â ja âââ tavaliste tĂŒĂŒpide puhul.
- VĂ€hendatud on olukordade arvu, kus tuleb kasutada âtypenameâ, et teavitada tĂŒĂŒbi olemasolust.
Allikas: opennet.ru
