ISO-komitee oor standaardisering van die C++-taal internasionale standaard"". Die vermoëns wat in die spesifikasie aangebied word, met die uitsondering van geïsoleerde gevalle, in samestellers , и . Standaardbiblioteke wat C++20 ondersteun, word binne die projek geïmplementeer .
In die volgende twee maande sal die goedgekeurde spesifikasie op die stadium wees van die voorbereiding van die dokument vir publikasie, waarop gewerk sal word aan redaksionele regstelling van spelfoute en tikfoute. Vroeg in November sal die gevolglike dokument aan ISO gestuur word vir publikasie onder die formele naam ISO/IEC 14882:2020. Intussen het die komitee reeds begin werk aan die volgende C++23-standaard (C++2b) en sal moontlike opsies by sy volgende virtuele vergadering oorweeg. .
():
- Bygevoeg "konsepte", sjabloonuitbreidings, wat jou toelaat om 'n stel sjabloonparametervereistes te definieer wat op die tydstip van samestelling die stel argumente wat as sjabloonparameters aanvaar kan word, beperk. Die konsepte kan gebruik word om logiese teenstrydighede tussen die eienskappe van die datatipes wat binne die sjabloon gebruik word en die datatipe-eienskappe van die invoerparameters te vermy.
sjabloon
konsep GelykheidVergelykbaar = vereis(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - Aanvaar vir die werk met modules wat gebruik kan word in plaas van koplêers. Modules bied 'n nuwe manier om bronkode te organiseer gebaseer op die definisie van die grense van komponente, sonder om koplêers in te sluit via "#include".
- Makro __VA_OPT__ vir aanpasbare uitbreiding van veranderlike makro's afhangende van die teenwoordigheid van tekens in die veranderlike argument.
- Ondersteuning vir die "" operateur vir drie-rigting vergelyking.
- Ondersteuning vir verstek element initialiseerders vir bitvelde.
- Vermoë om "*hierdie" uitdrukkings op lambda vas te lê.
struct int_value {
int n = 0;
outo getter_fn() {
//SLEG:
// return [=]() { return n; };// GOED:
return [=, *hierdie]() { terugkeer n; };
}
}; - Roep elemente deur wyser (wyser-na-lid), gebruik wysers na tydelike voorwerpe wat deur die "konst &" uitdrukking gedefinieer word.
- Die verwyderoperateur met 'n vernietiger wat in die dokument beskryf word .
- Klasse word toegelaat om sjabloonparameters sonder 'n tipe te gebruik.
struct foo {
foo() = verstek;
constexpr foo(int) {}
};sjabloon
outo get_foo() {
terugkeer f;
}get_foo(); // gebruik implisiete konstruktor
kry_foo (); - Nie-aanhoudende lambda-uitdrukkings met konstruktor.
- Laat sjabloonsintaksis toe vir lambda-uitdrukkings ("auto f = [] (std::vektor v)").
- Vermoë om string letterlike te gebruik in sjabloon parameters.
- Ondersteuning vir C-styl inisialiseringsintaksis - velde wat nie eksplisiet in die inisialiseringslys gelys word nie, word by verstek geïnisialiseer.
struktuur A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
- Ondersteuning vir leë datastruktuurlede.
- Ondersteuning vir die waarskynlike en onwaarskynlike eienskappe om die optimaliseerder in te lig oor die waarskynlikheid dat die voorwaardelike konstruk geaktiveer word ("[[waarskynlik]] as (willekeurig > 0) {").
- Vermoë om reekse te gebruik om veranderlike waardes in 'n "vir" lus te inisialiseer
vir (outo v = std::vektor{1, 2, 3}; outo& e: v) {
- Outomatiese berekening van skikkingsgrootte in nuwe ("new double[]{1,2,3}");
- Die "[[geen_unieke_adres]]"-kenmerk waarin veranderlikes sonder data nie spasie opneem nie.
- Atoomwysers (std::atomic > en std::atomiese >).
- Vermoë om virtuele funksies in voorwaardelike uitdrukkings te noem.
- Ondersteuning vir onmiddellike funksies wat slegs met konstantes kan werk.
consteval int sqr(int n) {
terugkeer n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // FOUT: 'x' kan nie as 'n konstante gebruik word nie - Moontlikheid om constexpr met virtuele funksies te gebruik ("constexpr virtual int f() const { return 2; }").
- In die standaard biblioteek:
- Bygevoeg ondersteuning vir die char8_t tipe vir UTF-8 snare.
- Bygevoeg kop lêers bietjie (bis bewerkings) en weergawe.
- Dit is nou moontlik om die voorvoegsel en agtervoegsel van stringe (begin_met, eindig_met) na te gaan.
- Bygevoeg std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible en std::type_identity eienskappe.
- Bygevoeg funksies std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_konstant_geëvalueer en std::assume_aligned.
- Bygevoeg ondersteuning vir skikkings by std::make_shared.
- Bygevoeg std::to_array-funksie om skikking-agtige voorwerpe om te skakel na std::array.
- Meer gerieflike opsommingsintaksis:
enum klas rgba_color_channel {rooi, groen, blou, alfa};
std::string_view to_string(rgba_color_channel my_channel) {
skakel (my_kanaal) {
gebruik enum rgba_color_channel;
kas rooi: gee "rooi" terug;
kas groen: gee "groen" terug;
kas blou: gee "blou" terug;
hoofletter alfa: gee "alfa" terug;
}
} - In indekse, as gevolg van ongedefinieerde gedrag, is die gebruik van die bewerking "," ("a[b,c]") verbied. Ondersteuning vir die meeste bewerkings met veranderlikes wat met die vlugtige sleutelwoord verklaar is, is gestaak, insluitend die "++" en "—" bedrywighede met standaardtipes.
- Verminder die aantal situasies waarin "tipenaam" vereis word om die teenwoordigheid van 'n tipe aan te dui.
Bron: opennet.ru
