Ua faamaonia e le komiti fa'atulagaina o gagana ISO C++ le lomiga mulimuli o le fa'amatalaga lea e fausia ai le tulaga fa'avaomalo "C++26." O foliga o lo'o tu'uina atu i le fa'amatalaga ua uma ona lagolagoina fa'atasi i le GCC, Clang, ma le Microsoft Visual C++ compilers. O faletusi masani e lagolagoina le C++26 ua fa'atinoina i totonu o le poloketi Boost.
I le isi lua masina, o le a faia ai se laasaga o le sauniuniga o le pepa mo le faamatalaga ua faamaonia, lea o le a faia ai ni faasaoga faatonu e foia ai mea sese i le sipelaga ma le sese o le sipelaga. I le amataga o Novema, o le a tuuina atu le lomiga mulimuli o le pepa i le ISO mo le lolomiina i lalo o le igoa aloaia ISO/IEC 14882:2026.
Vaega autū o le C++26:
- Ua fa'atinoina elemene o le polokalameina o konekarate (Konekarate), e mafai ai ona e fa'amatalaina fa'amatalaga aloaia o le atina'e e fa'aaoga ai ni fa'agaioiga fou se tolu: pre (precondition), post (postcondition), ma le contract_assert (siakiina o le fa'amaoniga). O le fa'agaioiga "pre" e fa'amatalaina ai tuutuuga muamua e tatau ona ausia a'o le'i faia se vala'au (fa'amaoniga o le ulufale); "post" e fa'amatalaina ai tuutuuga e tatau ona ausia pe a uma ona fa'atinoina (mana'oga o le fa'ai'uga); contract_assert e fa'amatalaina ai tuutuuga mo le fa'alauiloaina o tuusaunoaga. O lenei foliga o le a avanoa i le GCC 16. int f(const int x) pre (x != 1) // mana'oga o le ulufale post (r : r == x && r != 2) // mana'oga o taunuuga; r o le tau ma le taunuuga { contract_assert (x != 3); return x; }
- Ua fa'aopoopoina le lagolago mo le toe fa'afo'isia o manatu, e mafai ai ona mata'ituina ma suia elemene o le polokalame i le taimi e tu'ufa'atasia ai. Ua fa'aopoopoina fo'i ni fa'agaioiga fou "^^" mo le mauaina o fa'amatalaga taua e uiga i se fausaga o le kalama ma le "[:ā¦:]" mo le fa'atinoina o le suiga fa'afeagai. Ua fautuaina le faletusi std::meta mo le suia ma le fa'agasoloina o fa'amatalaga na maua i le taimi o le siakiina, ma o lo'o maua fo'i agava'a e pei o fa'atusatusaga ma mea tumau. O le a fa'aopoopoina le lagolago mo le toe fa'afo'isia o manatu i le 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' ma le 'j' e eseese tau. static_assert(constant_of(^^i) == constant_of(^^j)); // 'i' ma le 'j' e tutusa lava static_assert(^^i != std::meta::reflect_constant(42)); // ese mai le tau 42
- Ua fa'aopoopoina le 'template for' mo le toe faia o mea i luga o elemene e pei o le parameter packs, tuple-like objects, ma reflection results (metaobjects) i le taimi o le compile i le faiga o se regular for loop. A fa'atinoina le 'template for', e fa'alauteleina le loop body mo elemene ta'itasi, ma o le toe faia ta'itasi e fa'agasolo i se va'aiga ese'ese lea e tumau ai le fesuia'iga o suiga i le loop. I le tulaga o le toe faia, e mafai ona fa'aogaina le 'template for' e toe faia ai mea i luga o meatotino o vasega po'o enums. O lenei foliga o le a maua i le GCC 16. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } o le a fa'alauteleina i le: 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 = *(__amata + 0); static_assert(I < 4); } { constexpr int I = *(__amata + 1); static_assert(I < 4); } { constexpr int I = *(__amata + 2); static_assert(I < 4); } } }
- Ua fa'aopoopoina le fa'avae std::execution mo le fa'atinoina o tulafono fa'a-asynchronous ma fa'a-parallel. E maua ai mea fa'atulagaina, lea e fa'amatalaina ai le fa'atulagaina o galuega (thread, thread pool, GPU, event loop), mea fa'atulagaina, lea e fa'amatalaina ai le galuega e fa'atinoina, ma mea fa'atulagaina e talia, lea e taulimaina le i'uga. fa'aaoga le namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Talofa le lalolagi! Ia i ai sau int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
- Ua fa'aopoopoina le faletusi std::simd mo le fa'atusatusaina o fa'agaioiga fa'amaumauga e fa'aaoga ai seti fa'atonuga SIMD e pei o le AVX-512 ma le NEON e fa'aaoga ai le faiga masani o le ituaiga 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 i'uga = a + b;
- O lo'o fautuaina se fa'atinoina o se vector (array) e fesuisuia'i le tele. Ua vaevaeina i luga o le stack, o lona tele e fuafuaina i le taimi e fa'aputu ai. E tutusa le API ma le std::vector, ae o elemene o le array e teuina i totonu, ae le o luga o le heap. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
- Ua fa'aopoopoina le fa'atonuga "#embed" mo le fa'apipi'iina o puna'oa binary i totonu o le code. const unsigned char icon_display_data[] = { #embed "art.png" };
- Fa'aopoopo le lagolago mo le fa'atupuina ma le taulimaina o tuusaunoaga i le taimi e tu'ufa'atasia ai pe a tutupu ni mea sese i le fa'asologa o le constexpr. constexpr std::optional siaki_vaevae(e le'i sainia n, e le'i sainia d) { taumafai { toe faafoi vaevaeina(n, d); } pu'e (...) { toe faafoi std::nullopt; } } constexpr aso parse_date(std::string_view input) { otometi [sa'o, tausaga, masina, aso] = ctre::match<ā([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})ā>(input); afai (!sa'o) { togi le aso_lÄ_sa'o{input}; } toe faafoi le aso_fausia(tausaga, masina, aso); }
- Ua fa'atinoina le fausaga o fa'amaumauga std::hive mo le teuina o fa'amaumauga e le'i fa'atonuina ma le toe fa'aaogaina o le manatua ua fa'asa'olotoina e elemene ua tapeina. Ua fa'alelei le fausaga mo galuega mamafa ma le fa'aopoopoina ma le tapeina o elemene i se fa'asologa fa'afuase'i. E le pei o fa'asologa, o le tapeina o se elemene i le std::hive e le suia ai isi elemene, ae fa'ailogaina le elemene ua tapeina o se mea gaogao, ona fa'atumu lea o le tulaga ua gaogao pe a fa'aopoopoina se elemene fou.
- Ua fa'aopoopoina le faletusi std::linalg fa'atasi ai ma le API fa'avae i le BLAS mo le algebra linear.
- Ua fa'aopoopoina le lagolago mo le faiga fa'amaopoopo o le Hazard Pointer, lea e taofia ai le fa'asa'olotoina o le manatua mo mea o lo'o maua e isi filo e aunoa ma le lokaina. A tapeina se mea, e na'o le fa'ailogaina o lo'o tapeina, ae o le manatua o lo'o nofoia e le mea e fa'asa'olotoina pe a uma ona fa'asa'oloto e filo uma le seti o le hazard pointer i le taimi e maua ai le mea.
- Ua fa'aopoopoina le lagolago mo le faiga fa'afetaui o le RCU (Read-Copy Update). O galuega tusitusi e fausia ai se fa'ata'ita'iga fou o le mea faitino, ae o galuega faitau e le poloka, ae fa'aauau pea ona galulue ma le fa'ata'ita'iga tuai. A mae'a le suiga, e amata ona fa'agaoioia le fa'ata'ita'iga fou, ma fa'atino ai galuega faitau fou i ai, ae o le fa'ata'ita'iga tuai e tapeina pe a mae'a ona faitauina e filo.
- Ua faia ni suiga e faʻamalosia ai le saogalemu o le faletusi masani, e pei o le siakiina o tau aoga ma le buffer overruns. Mo se faʻataʻitaʻiga, pe a ulufale i le elemene "constexpr reference operator[](size_type idx) const;", o le a faʻaopoopoina se siaki mo le tulaga "idx < size()".
- O le mafai ona faʻaaoga le upu autu constexpr faʻatasi ai ma se fesuiaiga o le new operator (placement new) e tuʻu ai se mea faitino i totonu o le manatua ua uma ona atofaina i le taimi faʻapipiʻi ua saunia.
- Ua fa'aopoopoina le lagolago mo fusi fa'atulagaina i le anotusi "constexpr", o lona uiga o fa'asinomaga i fa'aupuga tumau e mafai nei ona avea ma fa'aupuga tumau lava. Ua fa'atinoina le lagolago mo fa'asologa ma fausaga faigofie. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- O fusi fa'atulagaina o lo'o lagolagoina nei le "..." syntax e fa'ama'oti ai pusa e pu'eina ai le numera o lo'o totoe o elemene i le fa'asologa o tofiga. ta'avale [x,y,z] = f(); // fesuiaiga x, y, z o le a aofia ai elemene e tolu na toe faafoi mai e f(). ta'avale [...xs] = f(); // package xs o le a aofia uma elemene na toe faʻafoʻi mai e f(). ta'avale [x, ...malo] = f(); // x o le a aofia ai le elemene muamua, ma le malologa o le a aofia ai le isi vaega. ta'avale [x, y, ...malo] = f(); // x o le a aofia ai le elemene muamua, y o le a aofia ai le lona lua, ma le malologa o le a aofia ai le lona tolu. ta'avale [x, ...malolo, z] = f(); // x o le a aofia ai le muamua, malolo o le a aofia ai le lona lua, ma le z o le a aofia ai le lona tolu.
- Faʻaopoopoina le lagolago mo le "Trivial Relocatability" o ituaiga, lea e mafai ai ona faʻamalieina le feʻaveaʻi o mea faitino o se ituaiga tuʻufaʻatasia e ala i le faʻapipiʻiina i latou i le mafaufau e aunoa ma le valaʻau i tagata faufale poʻo faʻaleagaina. O le memberwise_trivially_relocatable ma memberwise_replaceable meatotino o loʻo faʻatinoina mo vasega, ma o le trivially_relocate_at ma trivially_relocate galuega e faʻaopoopoina mo le maualalo o le gaioiga o se tasi pe sili atu mea.
- Ua fa'atinoina le lagolago mo le fa'apipi'iina o le galuega autu (main() i se module lautele ma le fa'amatalaina o le galuega autu (main() i modules ua faaigoaina.
- Ua fa'aopoopoina le fa'agaioiga fesuia'i "uo" ("uo Ts...").
- Uiga ua fa'atinoina mo fusi fa'atulagaina;
- Ua fa'aopoopoina le fa'atulagaga '= delete("mafua'aga")'.
- O le seti autū o mataitusi e aofia ai le "@", "$", ma le "`".
- Ua saunia le mafai ona faʻaaoga le faʻatulagaina o le fusifusia o se tuutuuga i faʻamatalaga o le if ma le switch.
- Fa'aopoopoina le tomai e fa'aoga ai le tele o mea e tu'u ai avanoa ma le igoa "_" i se tasi lautele, mo se fa'ata'ita'iga, ua sa'o nei fausaga: struct S { int _, _; }; void func() { int _, _; } fa'aleaogaina isi() { int _; // muamua na faʻaalia se lapataiga ile -Wunused mode }
- E mafai ona fa'aogaina le manoa i totonu o se fa'amatalaga e le fa'aaogaina e amata ai se fa'asologa o uiga ma e le i'u i le fa'ai'uga code, ae fa'aaoga i le taimi fa'amaopoopo mo fe'au fa'ama'i ma le fa'agasolo, mo se fa'ata'ita'iga, e fai ma fa'asologa o faatonuga ma uiga _Pragma, asm, extern, static_assert, [[fa'ate'aina]] ma [[nodiscard]].
- Ua fa'aopoopoina galuega fa'atino ua uma ona fausia: "__builtin_is_within_lifetime" e siaki ai pe o lo'o galue se isi auala i totonu o fa'alapotopotoga ma le "__builtin_is_virtual_base_of" e siaki ai pe o le vasega fa'avae o se vasega fa'apitoa.
- Fa'atinoina ni ta'amilosaga e le gata ma faigofie e aunoa ma se amioga e le'i fa'amatalaina.
- Ia mautinoa o loʻo faʻaalia se mea sese pe a tapeina se faʻasino i se ituaiga e leʻi maeʻa.
- O le syntax mo le fa'amalamalamaina o fa'asologa fa'asolosolo ma se ellipsis e aunoa ma se koma muamua (mo se fa'ata'ita'iga, pe a fa'amaoti le "void e(int...)" nai lo le "void e(int,...)") ua fa'agata.
- E fa'asaina le fa'aogaina o macros e fa'ailoa ai modules.
- Ua lÄ toe fa'aaogaina ni fa'aliliuga fa'alilolilo o tau fa'asino i fa'atusatusaga fa'a-aritmetika. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // lÄ toe fa'aaogaina int k = f - e; // lÄ toe fa'aaogaina int x = +f - e; // OK }
- Ua taofia le lagolago mo le fa'atusatusaga tuusa'o o le fa'asologa. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
- O le is_trivial template class ua le toe fa'aaogaina.
puna: opennet.ru
