Komiteti ISO pĂ«r standardizimin e gjuhĂ«s C++ standardi ndĂ«rkombĂ«tar ââ. MundĂ«sitĂ« e paraqitura nĂ« specifikim, pĂ«rveç rasteve tĂ« veçanta, nĂ« kompajlerĂ«t , dhe . Bibliotekat standarde qĂ« mbĂ«shtesin C++20 janĂ« realizuar nĂ« kuadĂ«r tĂ« projektit .
Në dy muajt e ardhshëm, specifikimi i miratuar do të jetë në fazën e përgatitjes së dokumentit për publikim, gjatë së cilës do të kryhet puna për redaktimin e gabimeve ortografike dhe gabimeve tjera. Në fillim të nëntorit, versioni përfundimtar i dokumentit do të dërgohet në ISO për publikim nën emrin formal ISO/IEC 14882:2020. Ndërkohë, komiteti tashmë ka filluar punën për standardin e ardhshëm C++23 (C++2b) dhe në takimin e ardhshëm virtual do të shqyrtojë shembujt e mundshëm .
():
- JanĂ« shtuar âkonceptetâ, zgjerime tĂ« shabllonĂ«ve qĂ« lejojnĂ« tĂ« pĂ«rcaktohen grupe kĂ«rkesash pĂ«r parametrat e shabllonit, tĂ« cilat gjatĂ« kompajlimit kufizojnĂ« grupin e argumenteve qĂ« mund tĂ« pranojnĂ« si parametra shabllonash. Konceptet mund tĂ« pĂ«rdoren pĂ«r tĂ« shmangur mospĂ«rputhjet logjike mes tipareve tĂ« tipeve tĂ« dhĂ«nash qĂ« pĂ«rdoren brenda shabllonit dhe tipareve tĂ« tipeve tĂ« dhĂ«nash tĂ« parametrave tĂ« hyrjes.
template
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - NĂ« pĂ«rbĂ«rje janĂ« pranuar pĂ«r tĂ« punuar me modulat, tĂ« cilat mund tĂ« pĂ«rdoren nĂ« vend tĂ« skedarĂ«ve titullues. ModulĂ«t ofrojnĂ« njĂ« mĂ«nyrĂ« tĂ« re pĂ«r organizimin e teksteve burimore bazuar nĂ« pĂ«rcaktimin e kufijve tĂ« komponenteve, pa skedarĂ«t titullues tĂ« pĂ«rfshirĂ« me â#includeâ.
- Makroja __VA_OPT__ për zbulimin adaptiv të makrosëve variativë në varësi të pranisë së tokeneve në argumentin variativ.
- MbĂ«shtetje pĂ«r operatorin ââ pĂ«r krahasimin trepalĂ«sh.
- Mbështetje për inicializuesit e elementeve të parazgjedhur për fushat bit.
- MundĂ«sia e kapjes sĂ« shprehjeve â*thisâ nga lambda.
struct int_value {
int n = 0;
auto getter_fn() {
// BAD:
// return [=]() { return n; };// GOOD:
return [=, *this]() { return n; };
}
}; - Thirrja e elementeve pĂ«rmes pointerĂ«ve (Pointer-to-member), duke pĂ«rdorur pointerĂ«t e pĂ«rcaktuar pĂ«rmes shprehjes âconst &â pĂ«r objektet e pĂ«rkohshme.
- Operatori delete me destruktori, i përshkruar në dokumentin .
- Klasat u lejohet të përdorin parametrat e shabllonit pa tip.
struct foo {
foo() = default;
constexpr foo(int) {}
};template
auto get_foo() {
return f;
}get_foo(); // përdor konstruktorin e implicit
get_foo(); - Lambdat e pa ruajtura me konstruktor.
- PranueshmĂ«ria pĂ«r pĂ«rdorimin e sintaksĂ«s sĂ« shabllonĂ«ve pĂ«r lambdat (âauto f = [](std::vector v)â ).
- Mundësia e përdorimit të literalëve string në parametrat e shabllonit.
- MbĂ«shtetje pĂ«r sintaksĂ«n e inicializimit nĂ« stilin C â fushat qĂ« nuk janĂ« shprehur qartĂ« nĂ« listĂ«n e inicializimit, inicializohen me parazgjedhje.
struct A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
- Mbështetje për anëtarë të zbrazët të strukturave të dhënash.
- MbĂ«shtetje pĂ«r atributet likely dhe unlikely pĂ«r tĂ« informuar optimizuesin pĂ«r probabilitetin e realizimit tĂ« njĂ« strukture kushtore (â[[likely]] if (random > 0) {â).
- MundĂ«sia e pĂ«rdorimit tĂ« intervaleve pĂ«r inicializimin e vlerave tĂ« variablit nĂ« ciklin âforâ
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- Llogaritja autonome e madhĂ«sisĂ« sĂ« vargut nĂ« new (ânew double[]{1,2,3}â);
- Atributi â[[no_unique_address]]â nĂ«n tĂ« cilin variablĂ«t pa tĂ« dhĂ«na nuk zĂ«nĂ« hapĂ«sirĂ«.
- Pointera atomikë (std::atomic<shared_ptr> dhe std::atomic<weak_ptr>).
- Mundësia e thirrjes së funksioneve virtuale në shprehje kushtore.
- Mbështetje për funksione të shpejta (immediate), të cilat mund të punojnë vetëm me constante.
consteval int sqr(int n) {
return n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // ERROR: 'x' nuk mund tĂ« pĂ«rdoret si constante - MundĂ«sia e aplikimit tĂ« constexpr me funksione virtuale (âconstexpr virtual int f() const { return 2; }â).
- Në bibliotekën standarde:
- Shtuar mbështetje për tipin char8_t për stringjet UTF-8.
- Shtuar skedarë titullues bit (operacionet bitore) dhe version.
- Krijuar mundësia e kontrollit të prefiksit dhe suffixit të stringjeve (starts_with, ends_with).
- Shtuar tiparet std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible dhe std::type_identity.
- Shtuar funksionet std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated dhe std::assume_aligned.
- Në std::make_shared është shtuar mbështetje për vargjet.
- Shtuar funksioni std::to_array për të shndërruar objekte të ngjashme me varg në std::array.
- Sintaksë më të lehtë për enumeratat:
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â;
}
} - NĂ« indekset pĂ«r shkak tĂ« sjelljeve tĂ« pasaktĂ«sive Ă«shtĂ« ndaluar pĂ«rdorimi i operacionit â,â (âa[b,c]â). Ndalohet mbĂ«shtetje pĂ«r shumicĂ«n e operacioneve me variablat qĂ« janĂ« shpallur me fjalĂ« kyçe volatile, duke pĂ«rfshirĂ« ndalimin e operacioneve â++â dhe â--â me tipet standard.
- U reduktua numri i situatave ku kĂ«rkohet tregimi âtypenameâ pĂ«r tĂ« informuar mbi praninĂ« e tipit.
Burimi: opennet.ru
