Standarti C++26 është miratuar

Komiteti ISO për standardizimin e gjuhës C++ ka përfunduar miratimin e variantit përfundimtar të specifikimit, që formon standardin ndërkombëtar "C++26". Mundësitë e paraqitura në specifikim tashmë mbështeten pjesërisht në kompilerët GCC, Clang dhe Microsoft Visual C++. Bibliotekat standarde që mbështesin C++26 janë implementuar në kuadër të projektit Boost.

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ë bëhet punë për redaktimin e gabimeve ortografike dhe tipografike. Në fillim të nëntorit, variantin përfundimtar të dokumentit do ta dërgojmë në ISO për publikim me emrin zyrtar ISO/IEC 14882:2026.

Karakteristikat kryesore të C++26:

  • JanĂ« implementuar elementĂ«t e programimit kontraktual (Contracts), qĂ« lejojnĂ« pĂ«rcaktimin e specifikimeve formale tĂ« ndĂ«rfaqeve pĂ«rmes tre operatorĂ«ve tĂ« rinj: pre (kushte paraprake), post (kushte pasuese) dhe contract_assert (kontrolli i pohimit). Operator 'pre' pĂ«rcakton kushtet paraprake qĂ« duhet tĂ« plotĂ«sohen para thirrjes (kontrolli i tĂ« dhĂ«nave hyrĂ«se); 'post' — kushtet qĂ« duhet tĂ« respektohen pas ekzekutimit (kĂ«rkesat pĂ«r tĂ« dhĂ«nat dalĂ«se); contract_assert — kushtet e shfaqjes sĂ« pĂ«rjashtimeve. Kjo mundĂ«si do tĂ« shfaqet nĂ« GCC 16. int f(const int x) pre (x != 1) // kĂ«rkesat pĂ«r tĂ« dhĂ«nat hyrĂ«se post (r : r == x && r != 2) // kĂ«rkesat pĂ«r rezultatin; r — vlera e rezultatit { contract_assert (x != 3); return x; }
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r refleksionin (Reflection), qĂ« mundĂ«son ndjekjen dhe modifikimin e elementeve tĂ« programĂ«s gjatĂ« fazĂ«s sĂ« kompilimit. JanĂ« shtuar operatorĂ« tĂ« rinj «^^» pĂ«r tĂ« marrĂ« metainformacion nĂ« lidhje me konstruktin gramatikor dhe «[:
:]» pĂ«r tĂ« kryer rikthimin e kundĂ«rt. PĂ«r konvertimin dhe trajtimin e informacionit tĂ« marrĂ« gjatĂ« inspektimit, Ă«shtĂ« propozuar biblioteka std::meta dhe janĂ« nĂ« dispozicion mundĂ«si si llogaritjet me konstanta. MbĂ«shtetje pĂ«r refleksionin do tĂ« shtohet nĂ« GCC 16. constexpr int i = 42, j = 42; constexpr std::meta::info r = ^^i, s = ^^i; static_assert(r == r && r == s); static_assert(^^i != ^^j); // ‘i’ dhe ‘j’ kanĂ« vlera tĂ« ndryshme. static_assert(constant_of(^^i) == constant_of(^^j)); // ‘i’ dhe ‘j’ janĂ« tĂ« njĂ«jtĂ« static_assert(^^i != std::meta::reflect_constant(42)); // ndryshon nga vlera 42
  • Shtuar operatori "template for" pĂ«r tĂ« iteruar elementĂ«t, tĂ« tilla si paketat e parametrave, objektet qĂ« ngjajnĂ« me tuple dhe rezultatet e refleksionit (metaobjekteve), nĂ« fazĂ«n e pĂ«rpilimit me stilin e njĂ« cikli tĂ« zakonshĂ«m. GjatĂ« ekzekutimit tĂ« "template for", trupi i ciklit zgjerohet pĂ«r çdo element dhe çdo iteracion trajtohet nĂ« njĂ« fushĂ« tĂ« veçantĂ« tĂ« dukshme, nĂ« tĂ« cilĂ«n variabla e ndryshueshme gjatĂ« ciklit Ă«shtĂ« njĂ« konstantĂ«. NĂ« kontekstin e refleksionit, "template for" mund tĂ« aplikohet pĂ«r tĂ« kaluar nĂ«pĂ«r pronat e klasave ose enumerimeve. Ky funksionalitet do tĂ« shfaqet nĂ« GCC 16. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } do tĂ« zgjerohet nĂ«: void f() { { constexpr auto&& __range = std::array{1, 2, 3}; constexpr auto __begin = __range.begin(); constexpr auto __expansion-size = __range.end() - __begin; // 3 { constexpr int I = *(__begin + 0); static_assert(I < 4); } { constexpr int I = *(__begin + 1); static_assert(I < 4); } { constexpr int I = *(__begin + 2); static_assert(I < 4); } } }
  • Shtuar framework-u std::execution pĂ«r ekzekutimin asinkron dhe paralel tĂ« kodit. Ofron objekte scheduler, qĂ« pĂ«rcakton planifikuesin e ekzekutimit (thread, pool threads, GPU, event loop), sender, qĂ« pĂ«rcakton punĂ«n qĂ« do tĂ« kryhet, dhe receiver — pĂ«rpunuesin e rezultatit. using namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Hello world! Have an int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
  • Shtuar biblioteka std::simd pĂ«r paralelizimin e ekzekutimit tĂ« operacioneve mbi tĂ« dhĂ«na duke pĂ«rdorur grupe instrukcionesh SIMD, si AVX-512 dhe NEON, duke shfrytĂ«zuar sistemin standard tĂ« tipeve C++. std::simd a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; std::simd result = a + b;
  • Propozuar implementimi i vektorit (masiv) me madhĂ«si tĂ« ndryshueshme std::inplace_vector, i vendosur nĂ« stack, me madhĂ«sinĂ« qĂ« pĂ«rcaktohet nĂ« fazĂ«n e kompilim. API Ă«shtĂ« e ngjashme me std::vector, por elementet e masivit ruhen jo nĂ« "heap", por brenda objektit. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
  • ËshtĂ« shtuar direktiva «#embed», e cila Ă«shtĂ« e destinuar pĂ«r integrim nĂ« kodin e burimeve binarĂ«. const unsigned char icon_display_data[] = { #embed «art.png» };
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r gjenerimin dhe trajtimin e pĂ«rjashtimeve gjatĂ« fazĂ«s sĂ« kompilimit nĂ« rast tĂ« gabimeve nĂ« kontekstin constexpr. constexpr std::optional checked_divide(unsigned n, unsigned d) { try { return divide(n, d); } catch (
) { return std::nullopt; } } constexpr date parse_date(std::string_view input) { auto [correct, year, month, day] = ctre::match(input); if (!correct) { throw incorrect_date{input}; } return build_date(year, month, day); }
  • ËshtĂ« realizuar struktura e dhĂ«nave std::hive pĂ«r ruajtjen e pa renditur tĂ« tĂ« dhĂ«nave dhe pĂ«r tĂ« siguruar riciklimin e memories qĂ« Ă«shtĂ« liruar pas elementeve tĂ« fshirĂ«. Struktura Ă«shtĂ« optimizuar pĂ«r ngarkesa me intensitet tĂ« lartĂ« tĂ« shtimit dhe fshirjes sĂ« elementeve nĂ« rregull tĂ« rastĂ«sishĂ«m. Ndryshe ngaArrays, fshirja e njĂ« elementi nĂ« std::hive nuk shkakton tĂ«rheqjen e elementeve tĂ« tjera, por i jep njĂ« etiketim elementit tĂ« fshirĂ« si tĂ« zbrazĂ«t dhe e mbush pozitat e liruar me shtimin e njĂ« elementi tĂ« ri.
  • ËshtĂ« shtuar biblioteka std::linalg me API pĂ«r algjebrĂ«n lineare, e bazuar nĂ« BLAS.
  • ËshtĂ« shtuar mbĂ«shtetja pĂ«r mekanizmin e sinkronizimit Hazard pointer, i cili lejon parandalimin e çlirimit tĂ« memories sĂ« objekteve pa vendosur bllokime, ndĂ«rsa vazhdohet puna me to nĂ« thread-e tĂ« tjera. Kur njĂ« objekt fshihet, ai vetĂ«m shĂ«nohet si i fshirĂ«, por memoria e zĂ«nĂ« nga objekti çlirohet vetĂ«m kur tĂ« gjitha thread-et heqin hazard-uan, i cili Ă«shtĂ« vendosur gjatĂ« punĂ«s me objektin.
  • ËshtĂ« shtuar mbĂ«shtetja pĂ«r mekanizmin e sinkronizimit RCU (Read-Copy Update) — gjatĂ« operacioneve tĂ« shkruar krijohet njĂ« ekzemplar i ri i objektit, ndĂ«rsa operacionet e leximit nuk bllokohen, por vazhdojnĂ« tĂ« punojnĂ« me ekzemplarin e vjetĂ«r. Pas pĂ«rfundimit tĂ« ndryshimit, ekzemplari i ri bĂ«het aktiv dhe operacionet e reja tĂ« leximit tashmĂ« kryhen me tĂ«, ndĂ«rsa ekzemplari i vjetĂ«r Ă«shtĂ« fshirĂ« pas pĂ«rfundimit tĂ« thread-eve qĂ« e lexojnĂ« atĂ«.
  • JanĂ« bĂ«rĂ« ndryshime pĂ«r tĂ« forcuar sigurinĂ« e bibliotekĂ«s standarde, siç janĂ« kontrollet e vlefshmĂ«risĂ« dhe daljes jashtĂ« kufijve tĂ« tamponit. PĂ«r shembull, gjatĂ« qasjes nĂ« elementin «constexpr reference operator[](size_type idx) const;» shtohet njĂ« kontroll i kushtit «idx < size()".
  • ËshtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« fjalĂ«s kyçe «constexpr» me variantin e operatorit «new» (placement new) pĂ«r vendosjen e njĂ« objekti nĂ« memorie tĂ« alokuar paraprakisht gjatĂ« kompilimit.
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r lidhje tĂ« strukturuara (structured binding) nĂ« kontekstin «constexpr», dmth. referencat nĂ« shprehje konstante tani mund tĂ« jenĂ« vetĂ« shprehje konstante. MbĂ«shtetje Ă«shtĂ« realizuar pĂ«r matrix dhe struktura tĂ« thjeshta. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
  • NĂ« lidhjet e strukturuara Ă«shtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« sintaksĂ«s « » pĂ«r treguesit (pack), qĂ« kapin numrin e mbetur tĂ« elementeve nga sekuenca e caktuar. auto [x,y,z] = f(); // nĂ« variablat x, y, z do tĂ« regjistrohen tre elemente, qĂ« kthehen nga f(). auto [
xs] = f(); // nĂ« paketĂ«n xs do tĂ« regjistrohen tĂ« gjitha elementet, qĂ« kthehen nga f(). auto [x, 
rest] = f(); // NĂ« x do tĂ« regjistrohet elementi i parĂ«, ndĂ«rsa nĂ« rest — elementĂ«t e tjerĂ«. auto [x, y, 
rest] = f(); // NĂ« x do tĂ« regjistrohet elementi i parĂ«, nĂ« y — i dyti, ndĂ«rsa nĂ« rest — i treti. auto [x, 
rest, z] = f(); // nĂ« x — i pari, nĂ« rest — i dyti, nĂ« z — i treti.
  • Shtohet mbĂ«shtetje pĂ«r "lĂ«vizshmĂ«rinĂ« triviale" tĂ« tipave (Trivial Relocatability), duke lejuar optimizimin e lĂ«vizjeve tĂ« objekteve tĂ« kĂ«tij tipi pĂ«rmes klonimit tĂ« tyre nĂ« memorie pa thirrjen e konstruktoreve ose destruktoreve. PĂ«r klasat janĂ« zbatuar pronat memberwise_trivially_relocatable dhe memberwise_replaceable, dhe pĂ«r lĂ«vizjen nĂ« nivel tĂ« ulĂ«t tĂ« njĂ« ose disa objekteve janĂ« shtuar funksionet trivially_relocate_at dhe trivially_relocate.
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r lidhjen e funksionit main() me modul global dhe pĂ«rcaktimin e funksionit main() nĂ« modul tĂ« emĂ«ruar.
  • ËshtĂ« shtuar operatori variativ "friend" ("friend Ts
").
  • JanĂ« realizuar atribute pĂ«r lidhje tĂ« strukturuara;
  • ËshtĂ« shtuar sintaksa '= delete("arsye")'.
  • Shtohen simbolet "@", "$" dhe "`" nĂ« setin e simbolit bazĂ«.
  • ËshtĂ« mundĂ«suar pĂ«rdorimi i lidhjeve tĂ« strukturuara (structured binding) si kusht nĂ« operatorĂ«t if dhe switch.
  • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« disa variablave tĂ« plotĂ«simit me emrin «_» nĂ« njĂ« fushĂ« tĂ« njĂ«jtĂ« pamjeje, pĂ«r shembull, tani janĂ« struktura tĂ« sakta: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // mĂ« parĂ« shfaqej njĂ« paralajmĂ«rim nĂ« modin -Wunused }
  • Ofrohet mundĂ«sia e pĂ«rdorimit tĂ« literalĂ«ve tĂ« vargut nĂ« kontekste ku ata nuk pĂ«rdoren pĂ«r inicializimin e njĂ« array simbolesh dhe nuk pĂ«rfshihen nĂ« kodin pĂ«rfundimtar, por pĂ«rdoren vetĂ«m gjatĂ« kompilimit pĂ«r mesazhe diagnostike dhe pĂ«rproçesim, pĂ«r shembull, si parametra tĂ« drejtimeve dhe atributeve _Pragma, asm, extern, static_assert, [[deprecated]] dhe [[nodiscard]].
  • Shtuar funksione tĂ« integruara: «__builtin_is_within_lifetime» pĂ«r tĂ« verifikuar aktivitetin e alternativĂ«s nĂ« unione (union) dhe «__builtin_is_virtual_base_of» pĂ«r tĂ« kontrolluar nĂ«se klasa bazĂ« Ă«shtĂ« virtuale.
  • Implementuar cikle triviale tĂ« pafundme pa sjellĂ« sjellje tĂ« papĂ«rcaktuar.
  • Siguruar njĂ« mesazh gabimi kur hiqet njĂ« pikator pĂ«r njĂ« tip tĂ« papĂ«rfunduar.
  • Deklarimi i sintaksĂ«s sĂ« vjetruar pĂ«r pĂ«rcaktimin e parametrave variativĂ« me pika pa njĂ« presje tĂ« mĂ«parshme (p.sh., kur spesifikohet «void e(int
)» nĂ« vend tĂ« «void e(int, 
)»).
  • PĂ«rdorimi i makroseve pĂ«r shpalljen e moduleve Ă«shtĂ« i ndaluar.
  • ËshtĂ« bĂ«rĂ« e papranueshme realizimi i transformimeve tĂ« nĂ«nkuptuara tĂ« vlerave tĂ« enumeruara nĂ« llogaritjet aritmetike. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // e papranueshme int k = f — e; // e papranueshme int x = +f — e; // OK }
  • Nuk mbĂ«shtetet mĂ« krahasimi direkt i array-eve. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
  • Klasa model is_trivial Ă«shtĂ« shpallur e vjetruar.

    Burimi: opennet.ru
Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster