C++26 e tloaelehileng e amohetsoe

Komiti ea maemo a puo ea ISO C++ e amohetse mofuta oa ho qetela oa tlhaloso e etsang tekanyetso ea machaba "C++26." Likarolo tse hlahisitsoeng tlhalosong li se li tšehetsoa ka karolo ho li-compilers tsa GCC, Clang, le Microsoft Visual C++. Lilaeborari tse tloaelehileng tse tšehetsang C++26 li se li kentsoe tšebetsong ka har'a projeke ea Boost.

Likhoeling tse peli tse tlang, tlhaloso e amohetsoeng e tla feta mohatong oa ho lokisa litokomane, moo ho tla etsoa litokiso tsa bohlophisi ho rarolla liphoso tsa mopeleto le liphoso tsa ho ngola. Mathoasong a Pulungoana, mofuta oa ho qetela oa tokomane o tla romelloa ho ISO bakeng sa phatlalatso tlas'a lebitso la semmuso la ISO/IEC 14882:2026.

Likarolo tsa bohlokoa tsa C++26:

  • Dikarolo tsa lenaneo la konteraka (Dikonteraka) di kentswe tshebetsong, tse o dumellang ho hlalosa di-specification tsa semmuso tsa sebopeho o sebedisa di-operators tse tharo tse ntjha: pre (precondition), post (postcondition), le contract_assert (teko ya assertion). Mosebelisi wa "pre" o hlalosa di-precondition tse lokelang ho fihlellwa pele ho pitso (netefatso ya ho kenya); "post" e hlalosa maemo a lokelang ho fihlellwa kamora ho etswa tshebetsong (ditlhoko tsa tlhahiso); contract_assert e hlalosa maemo a ho phahamisa mekhelo. Tshebetso ena e tla fumaneha ho GCC 16. int f(const int x) pre (x!= 1) // ditlhoko tsa ho kenya poso (r : r == x && r != 2) // ditlhoko tsa sephetho; r ke boleng bo nang le sephetho { contract_assert (x != 3); kgutlisa x; }
  • Tšehetso ea ho nahana e ekelitsoe, e lumellang ho beha leihlo le ho fetola likarolo tsa lenaneo ka nako ea ho kopanya. Basebelisi ba bacha "^^" bakeng sa ho fumana tlhaiso-leseling e mabapi le kaho ea sebōpeho-puo le "[:…:]" bakeng sa ho etsa phetoho e fapaneng ba ekelitsoe. Laeborari ea std::meta e sisintsoe bakeng sa ho fetola le ho sebetsana le tlhahisoleseling e fumanoeng nakong ea tlhahlobo, 'me bokhoni bo kang lipalo tse nang le li-constant boa fumaneha. Tšehetso ea ho nahana e tla eketsoa ho 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' le 'j' li na le boleng bo fapaneng. static_assert(constant_of(^^i) == constant_of(^^j)); // 'i' le 'j' li tšoana static_assert(^^i != std::meta::reflect_constant(42)); // e fapane le boleng ba 42
  • Ho ekelitsoe 'template bakeng sa' bakeng sa ho pheta-pheta holim'a likarolo tse kang lipakete tsa liparamente, lintho tse kang tuple, le liphetho tsa ho bonahatsa (metaobjects) nakong ea ho kopanya ka mokhoa oa loop ea kamehla. Ha ho etsoa 'template bakeng sa', 'mele oa loop o atolosoa bakeng sa karolo ka 'ngoe, 'me phetoho ka 'ngoe e sebetsoa ka sekoting se arohaneng moo phetoho ea phetoho ho loop e sa fetoheng. Moelelong oa ho bonahatsa, 'template bakeng sa' e ka sebelisoa ho pheta-pheta holim'a thepa ea lihlopha kapa li-enum. Tšobotsi ena e tla fumaneha ho GCC 16. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } e tla atoloha ho: 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 = *(__qala + 0); static_assert(I < 4); } { constexpr int I = *(__qala + 1); static_assert(I < 4); } { constexpr int I = *(__qala + 2); static_assert(I < 4); } } }
  • E ekelitse moralo oa std::execution bakeng sa ts'ebetso ea khoutu e sa tsamaellaneng le e tsamaellanang. E fana ka lintho tsa kemiso, tse hlalosang kemiso ea mosebetsi (khoele, letamo la khoele, GPU, loop ea ketsahalo), lintho tsa kemiso, tse hlalosang mosebetsi o lokelang ho etsoa, ​​​​le lintho tsa kemiso, tse sebetsanang le sephetho. using namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Lumela lefatše! E-ba le int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
  • Laeborari ea std::simd e ekelitsoe bakeng sa ho bapisa ts'ebetso ea data ho sebelisa li-set tsa litaelo tsa SIMD tse kang AVX-512 le NEON ho sebelisoa sistimi e tloaelehileng ea mofuta oa C++. a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; sephetho sa std::simd = a + b;
  • Ho sisintswe ho kenngwa tshebetsong ha vekthara ya boholo bo feto-fetohang (array) std::inplace_vector. E abetswe hodima stack, eo boholo ba yona bo lekanyetswang ka nako ya ho kopanya. API e tshwana le std::vector, empa dikarolo tsa array di bolokwa kahare, eseng hodima heap. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
  • Taelo ea "#embed" e ekelitsoe bakeng sa ho kenya mehloli ea binary khoutung. const unsigned char icon_display_data[] = { #embed "art.png" };
  • Tšehetso e ekelitsoeng bakeng sa ho hlahisa le ho sebetsana le mekhelo nakong ea ho bokella ha liphoso li hlaha moelelong oa constexpr. checked_divide(e sa saennweng n, e sa saennweng d) { leka { khutlisa karohano(n, d); } tshwara (...) { khutlisa std::nullopt; } } constexpr letsatsi la parse(std::string_view input) { auto [e nepahetseng, selemo, kgwedi, letsatsi] = ctre::match<“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”>(input); haeba (!e nepahetseng) { lahlela letsatsi_le fosahetseng{input}; } khutlisa letsatsi_la_haho (selemo, kgwedi, letsatsi); }
  • Sebopeho sa data sa std::hive se kentswe tshebetsong bakeng sa polokelo ya data e sa laolwang le tshebediso botjha ya memori e lokollotsweng ke dielemente tse hlakotsweng. Sebopeho sena se ntlafaditswe bakeng sa mesebetsi e mengata ka ho eketsa le ho hlakola dielemente ka matla a hodimo ka tatellano e sa reroang. Ho fapana le di-array, ho tlosa elemente ho std::hive ha ho fetole dielemente tse ding, empa ho ena le hoo ho tshwaya elemente e hlakotsweng e se na letho, ebe e tlatsa boemo bo se nang letho ha elemente e ntjha e eketswa.
  • Ho ekelitsoe laeborari ea std::linalg ka API e thehiloeng ho BLAS bakeng sa algebra e otlolohileng.
  • Tšehetso e ekelitsoeng bakeng sa mokhoa oa ho hokahanya oa Hazard Pointer, o thibelang ho lokolloa ha memori bakeng sa lintho tse fihlellehang ke likhoele tse ling ntle le ho notlela. Ha ntho e hlakotsoe, e tšoauoa feela e le e hlakotsoeng, empa memori e nkiloeng ke ntho e lokolloa feela ka mor'a hore likhoele tsohle li lokolle sesupa-tsela sa kotsi se behiloeng nakong ea phihlello ea ntho.
  • Tšehetso e ekelitsoeng bakeng sa mokhoa oa ho hokahanya oa RCU (Read-Copy Update). Mesebetsi ea ho ngola e theha mohlala o mocha oa ntho, ha mesebetsi ea ho bala e sa thibele, empa e tsoela pele ho sebetsa le mohlala oa khale. Kamora hore phetoho e phethe, mohlala o mocha o qala ho sebetsa, 'me mesebetsi e mecha ea ho bala e etsoa ho oona, ha mohlala oa khale o hlakoloa ka mor'a hore likhoele tse o balang li phethe.
  • Ho entsoe liphetoho ho matlafatsa polokeho ea laeborari e tloaelehileng, joalo ka ho hlahloba boleng bo nepahetseng le ho feta ha buffer. Mohlala, ha ho kena ho element "constexpr reference operator[](size_type idx) const;", ho eketsoa cheke ea boemo "idx < size()".
  • Bokhoni ba ho sebelisa lentsoe la bohlokoa la constexpr le nang le mofuta oa opereishene e ncha (placement new) ho beha ntho memoring e abetsoeng esale pele nakong ea ho kopanya boa fanoa.
  • Tšehetso e ekelitsoeng bakeng sa litlamo tse hlophisitsoeng moelelong oa "constexpr", ho bolelang hore litšupiso tsa lipolelo tse sa fetoheng joale e ka ba lipolelo tse sa fetoheng ka botsona. Tšehetso e kenngoa tšebetsong bakeng sa lihlopha le meaho e bonolo. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
  • Litlamo tse hlophisitsoeng joale li tšehetsa "..." syntax ho hlakisa lipakete tse nkang palo e setseng ea likarolo tatellanong ea likabelo. auto [x,y,z] = f(); // mefuta e fapaneng x, y, z e tla ba le likarolo tse tharo tse khutlisitsoeng ke f(). auto [...xs] = f(); // package xs e tla ba le likarolo tsohle tse khutlisitsoeng ke f(). auto [x, ... phomolo] = f(); // x e tla ba le karolo ea pele, 'me phomolo e tla ba le tse ling kaofela. auto [x, y, ... phomolo] = f(); // x e tla ba le karolo ea pele, y e tla ba le ea bobeli, 'me phomolo e tla ba le ea boraro. auto [x, ... phomolo, z] = f(); // x e tla ba le ea pele, phomolo e tla ba le ea bobeli, 'me z e tla ba le ea boraro.
  • Ts'ehetso e ekelitsoeng bakeng sa "Trivial Relocatability" ea mefuta, e lumellang ho ntlafatsa motsamao oa lintho tsa mofuta o itseng ka ho li kopanya mohopolong ntle le ho bitsa lihahi kapa bahahi. Thepa ea memberwise_trivially_relocatable le memberwise_replaceable e sebelisoa bakeng sa lihlopha, 'me mesebetsi ea trivially_relocate_at and trivially_relocate e eketsoa bakeng sa motsamao o tlaase oa ntho e le 'ngoe kapa ho feta.
  • Tšehetso e se e kentsoe tšebetsong bakeng sa ho hokela mosebetsi oa main() ho mojule oa lefats'e ka bophara le ho hlalosa mosebetsi oa main() ka li-module tse reheletsoeng ka mabitso.
  • E kentse "friend" ("friend" ("friend Ts...") "Opereishene e feto-fetohang".
  • Litšobotsi tse sebelisitsoeng bakeng sa litlamo tse hlophisitsoeng;
  • Sebopeho sa poleloana se ekelitsoe '= hlakola ("lebaka")'.
  • Sete ea litlhaku tsa motheo e kenyelletsa "@", "$", le "`".
  • Bokhoni ba ho sebelisa tlamo e hlophisitsoeng e le boemo lipolelong tsa haeba le switch bo fanoe.
  • E kentse bokhoni ba ho sebelisa mefuta e mengata ea litšoantšiso tse bitsoang "_" sebakeng se le seng; mohlala, lihahi tse latelang joale li nepahetse: sebopeho S { int _, _; }; void func() { int _, _; } lefeela tse ling () { int _; // pejana temoso e ne e hlahisoa ka mokhoa oa -Wunused }
  • Bokhoni ba ho sebelisa li-string literals maemong ao li sa sebelisetsoeng ho qalisa lethathamo la litlhaku 'me li sa hlahe khoutu e hlahisoang, empa li sebelisoa feela ka nako ea ho bokella melaetsa ea tlhahlobo le ho tsoela pele, mohlala, e le liparamente ho _Pragma, asm, extern, static_assert, [[deprecated]]] le [[directivescard] le [directivescard].
  • Mesebetsi e kenyellelitsoeng e kentsweng kahare: "__builtin_is_within_lifetime" ho hlahloba hore na mokhoa o mong o sebetsa ho diyunione le "__builtin_is_virtual_base_of" ho hlahloba hore na sehlopha sa motheo ke sa sebele.
  • Ho kentswe tshebetsong di-loops tse sa feleng tse sa reng letho ntle le boitshwaro bo sa hlaloswang.
  • E netefalitse hore phoso e hlaha ha ho hlakoloa pointer ho mofuta o sa fellang.
  • Poleloana ea ho hlalosa liparamente tse fapaneng ka ellipsis ntle le koma e tlang pele (mohlala, ha u hlakisa "void e(int...)" sebakeng sa "void e(int, ...)") e tlositsoe.
  • Tšebeliso ea macros ho phatlalatsa li-module e thibetsoe.
  • Liphetoho tse sa bonahaleng tsa boleng bo thathamisitsoeng lipalo tsa lipalo li se li sa sebetse. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // e sa sebetseng int k = f - e; // e sa sebetseng int x = +f - e; // OK }
  • Tšehetso ea papiso ea sehlopha se tobileng e emisitsoe. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
  • The is_trivial template class e tlositsoe.

    Source: opennet.ru
Reka sebaka se tšepahalang sa libaka tse nang le ts'ireletso ea DDoS, li-server tsa VPS VDS 🔥 Reka sebaka se tšepahalang sa ho amohela webosaete ka tšireletso ea DDoS, li-server tsa VPS VDS | ProHoster