Guddiga heerka luqadda ISO C++ ayaa ansixiyay nooca ugu dambeeya ee qeexitaanka kaas oo sameeya heerka caalamiga ah ee "C++26." Astaamaha lagu soo bandhigay qeexitaanka waxaa horeyba qayb ahaan loogu taageeray isku-dubaridayaasha GCC, Clang, iyo Microsoft Visual C++. Maktabadaha caadiga ah ee taageeraya C++26 ayaa lagu hirgeliyay mashruuca Boost.
Labada bilood ee soo socda, qeexitaanka la ansixiyay wuxuu mari doonaa marxaladda diyaarinta dukumentiyada, kaas oo lagu sameyn doono sixitaan tifaftiran si wax looga qabto khaladaadka higgaadda iyo khaladaadka qoraalka. Horraantii Noofambar, nooca ugu dambeeya ee dukumeentiga waxaa loo gudbin doonaa ISO si loogu daabaco magaca rasmiga ah ee ISO/IEC 14882:2026.
Astaamaha ugu muhiimsan ee C++26:
- Qaybaha barnaamijyada qandaraaska (Qandaraasyada) ayaa la hirgeliyay, taasoo kuu oggolaanaysa inaad qeexdo qeexitaannada is-dhexgalka rasmiga ah iyadoo la adeegsanayo saddex hawl-wadeen oo cusub: pre (pre condition), post (postcondition), iyo contract_assert (hubinta xaqiijinta). Hawl-wadeenka "pre" wuxuu qeexayaa shuruudo horudhac ah oo ay tahay in la buuxiyo ka hor wicitaanka (ansixinta gelinta); "post" wuxuu qeexayaa shuruudaha ay tahay in la buuxiyo ka dib fulinta (shuruudaha wax soo saarka); contract_assert wuxuu qeexayaa shuruudaha lagu soo kordhinayo ka-reebista. Sifadan waxay ka heli doontaa GCC 16. int f(const int x) pre (x != 1) // shuruudaha gelinta boostada (r : r == x && r != 2) // shuruudaha natiijada; r waa qiimaha natiijada { contract_assert (x != 3); soo celi x; }
- Taageerada milicsiga ayaa lagu daray, taasoo u oggolaanaysa la socodka iyo wax ka beddelka walxaha barnaamijka wakhtiga ururinta. Hawl-wadeennada cusub ee "^^" si loo helo macluumaadka meta ee ku saabsan dhismaha naxwaha iyo "[:…:]" si loo sameeyo isbeddelka rogaal-celinta ayaa lagu daray. Maktabadda std::meta waxaa loo soo jeediyay beddelka iyo farsamaynta macluumaadka la helay inta lagu jiro kormeerka, awoodaha sida xisaabinta joogtada ahna waa la heli karaa. Taageerada milicsiga waxaa lagu dari doonaa 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' iyo 'j' waxay leeyihiin qiimayaal kala duwan. static_assert(constant_of(^^i) == constant_of(^^j)); // 'i' iyo 'j' waa isku mid static_assert(^^i != std::meta::reflect_constant(42)); // ka duwan qiimaha 42
- Waxaa lagu daray 'template for' si loogu celceliyo walxaha sida xirmooyinka halbeegga, walxaha u eg tuple, iyo natiijooyinka milicsiga (metaobjects) waqtiga ururinta qaabka caadiga ah ee wareegga. Marka la fulinayo 'template for', jirka wareegga ayaa loo ballaariyaa walax kasta, soo noqnoqoshana waxaa lagu farsameeyaa baaxad gaar ah oo isbeddelka isbeddelka wareegga uu yahay mid joogto ah. Macnaha milicsiga, 'template for' waxaa loo isticmaali karaa in lagu celceliyo sifooyinka fasallada ama enums. Sifadan waxaa laga heli doonaa GCC 16. void f() { template for (constexpr int I: std::array{1, 2, 3}) { static_assert(I < 4); } } wuxuu ku fidi doonaa: 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); } } }
- Waxaa lagu daray qaab-dhismeedka fulinta std:: ee fulinta koodhka aan isku mid ahayn iyo kan barbar socda. Waxay bixisaa walxaha jadwalka sameeya, kuwaas oo qeexaya jadwalka shaqada (mawduuca, barkadda dunta, GPU, wareegga dhacdada), walxaha diraha, kuwaas oo qeexaya shaqada la fulinayo, iyo walxaha qaataha, kuwaas oo maareeya natiijada. iyadoo la adeegsanayo namespace std::fulitaanka; jadwaliye auto sch = thread_pool.scheduler(); diraha auto start = schedule(sch); diraha auto hi = then(begin, []{ std::cout < "Hello world! Have an int."; return 13; }); diraha auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
- Maktabadda std::simd ayaa lagu daray si loogu barbar dhigo hawlgallada xogta iyadoo la adeegsanayo qalabka tilmaamaha SIMD sida AVX-512 iyo NEON iyadoo la adeegsanayo nidaamka nooca C++ ee caadiga ah. std::simd a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; natiijada std::simd = a + b;
- Hirgelinta vektor cabbir-beddel ah (array) std::inplace_vector ayaa la soo jeediyay. Waxaa lagu qoondeeyay is dul-saarista, cabbirka kaas oo lagu go'aamiyo waqtiga isku-darka. API-gu wuxuu la mid yahay std::vector, laakiin walxaha isku-darka waxaa lagu kaydiyaa gudaha, ee ma aha meesha ku taal. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
- Tilmaamaha "#embed" ayaa lagu daray si loogu daro kheyraadka binary-ga koodhka. const unsigned char icon_display_data[] = { #embed "art.png"};
- Waxaa lagu daray taageero loogu talagalay abuurista iyo maaraynta ka-reebista wakhtiga ururinta marka khaladaadku ka dhacaan macnaha guud ee contexpr. constexpr std::optional checked_divide(unsigned n, unsigned d) { isku day { soo celi qaybi(n, d); } catch (...) { soo celi std::nullopt; } } constexpr taariikhda parse_date(std::string_view gelinta) { auto [sax, sanad, bil, maalin] = ctre::match<“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”>(gelinta); haddii (!sax) { tuur taariikhda_qalad_ku-darka{gelinta}; } soo celi taariikhda_dhismaha(sanadka, bisha, maalinta); }
- Qaab-dhismeedka xogta std::hive waxaa loo hirgeliyay kaydinta xogta aan la nidaamin iyo dib u isticmaalka xusuusta ay xoreeyeen walxaha la tirtiray. Qaab-dhismeedka waxaa loo habeeyay culaysyada shaqada iyadoo lagu darayo xoojinta sare iyo tirtirka walxaha si aan kala sooc lahayn. Si ka duwan safka, tirtirka walxaha ku jira std::hive ma beddelo walxaha kale, laakiin waxay calaamadisaa walxaha la tirtiray inay madhan yihiin, ka dibna waxay buuxisaa booska la banneeyay marka walxo cusub lagu daro.
- Waxaa lagu daray maktabadda std::linalg oo leh API ku salaysan BLAS oo loogu talagalay aljebrada toosan.
- Waxaa lagu daray taageero loogu talagalay habka isku-dubaridka Tilmaamaha Khatarta, kaas oo ka hortagaya sii deynta xusuusta walxaha ay galaan dunta kale iyada oo aan la qufulin. Marka shay la tirtiro, waxaa lagu calaamadeeyaa oo keliya in la tirtiray, laakiin xusuusta uu ku jiro shaygu waxaa la sii daayaa oo keliya ka dib marka dhammaan duntu ay sii daayaan tilmaamaha khatarta ah ee la dejiyay inta lagu jiro marin u helidda shayga.
- Waxaa lagu daray taageero loogu talagalay habka isku-dubaridka RCU (Read-Copy Update). Hawlgallada qorista waxay abuuraan tusaale cusub oo shayga ah, halka hawlgallada akhrintu aysan xannibin, laakiin waxay sii wadaan inay la shaqeeyaan tusaalihii hore. Ka dib marka isbeddelku dhammaado, tusaalaha cusub wuxuu noqdaa mid firfircoon, hawlgallo akhris cusubna waa lagu sameeyaa, halka tusaalihii horena la tirtiro ka dib marka la akhriyo dhammaan mawduucyada.
- Isbeddello ayaa la sameeyay si loo xoojiyo badbaadada maktabadda caadiga ah, sida hubinta qiimayaasha saxda ah iyo xad-dhaafka kaydka. Tusaale ahaan, marka la galayo curiyaha "constexpr reference operator[](size_type idx) const;", hubinta xaaladda "idx <size()" ayaa lagu darayaa.
- Awoodda lagu isticmaalo ereyga muhiimka ah ee constexpr oo leh nooc ka mid ah hawlwadeenka cusub (meelaynta cusub) si shay loogu dhigo xusuusta hore loo qoondeeyay wakhtiga ururinta ayaa la bixiyaa.
- Taageero lagu daray isku xidhka qaabaysan ee macnaha guud ee "constexpr", taasoo la macno ah in tixraacyada tibaaxaha joogtada ah hadda ay noqon karaan tibaaxo joogto ah laftooda. Taageerada waxaa loo hirgeliyaa arraysyada iyo qaab-dhismeedka fudud. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Xirmooyinka habaysan hadda waxa ay taageerayaan ereyga "..." syntax si loo qeexo xidhmooyin qabta tirada soo hadhay ee curiyeyaasha ee isku xigxiga hawsha. auto [x,y,z] = f(); // doorsoomayaasha x, y, z waxay ka koobnaan doonaan saddexda walxood ee ay soo celisay f(). auto [...xs] = f (); // xirmo xs ayaa ka koobnaan doona dhammaan walxaha lagu soo celiyay f(). auto [x, ... nasasho] = f (); // x waxa ku jiri doona cunsurka koowaad, nasashadana waxa ku jiri doona inta soo hadhay. auto [x, y, ... nasasho] = f (); // x waxa ka koobnaan doona curiyaha kowaad, y waxa ku jiri doona ka labaad, nasashada waxa ka koobnaan doona ta saddexaad. auto [x, ... nasasho, z] = f (); // x waxa ka koobnaan doona kan hore, nasashada waxa ka koobnaan doona kan labaad, z waxa uu ka koobnaan doonaa ta saddexaad.
- Taageero lagu daray "Relocatability Trivial" ee noocyada, taas oo u oggolaanaysa in la wanaajiyo dhaqdhaqaaqa walxaha nooca la bixiyay iyada oo lagu xirayo xusuusta iyada oo aan la wicin wax-dhisayaasha ama burburiyeyaasha. Guryaha xubnaha_dhaqdhaqaaqa_dhaqdhaqaaqa_dhaqdhaqaaqa_dhaqdhaqaaqa_hooseeya ee hal ama kabadan shay ayaa loofuliyaa fasalada.
- Taageerada ayaa la hirgeliyay si loogu xiro shaqada ugu weyn() module caalami ah iyo qeexidda shaqada ugu weyn() ee modules-ka la magacaabay.
- Waxaa lagu daray "saaxiib" oo ah hawlwadeenka doorsoomaha ("saaxiib Ts...").
- Sifooyinka la hirgeliyay ee ku xidhnaanta qaabaysan;
- Naxwe lagu daray '= tirtir("sabab")'.
- Qalabka asaasiga ah waxaa ka mid ah "@", "$", iyo "`".
- Awoodda loo isticmaalo xidhitaanka qaabaysan shuruud ahaan marka la eego weedhaha haddii iyo beddelka ayaa la bixiyaa.
- Waxaa lagu daray awoodda isticmaalka doorsoomayaal meeleeye badan oo lagu magacaabo "_" hal baaxad; tusaale ahaan, dhismayaasha soo socda ayaa hadda sax ah: struct S { int _, _; }; func () {int _, _; } kale () {int _; // hore digniin ayaa lagu soo bandhigay -Wunused mode }
- Awoodda loo isticmaalo xargaha xargaha ee macnaha guud ee aan loo isticmaalin in lagu bilaabo habaynta jilayaasha oo aan ka muuqan koodka natiijada, laakiin waxaa loo isticmaalaa oo keliya wakhtiga la isku duba rido farriimaha ogaanshaha iyo ka-hortagga, tusaale ahaan, sida xuduudaha _Pragma, asm, extern, static_assert, [[deprecated]] iyo [[nodiscard and Direction]
- Shaqooyinka ku dhex jira waxaa lagu daray: "__builtin_is_within_lifetime" si loo hubiyo in beddelku uu ka shaqeynayo ururada shaqaalaha iyo "__builtin_is_virtual_base_of" si loo hubiyo in fasalka aasaasiga ahi yahay mid casri ah.
- Waxaan hirgeliyay wareegyo aan dhammaad lahayn oo aan macno lahayn iyada oo aan lahayn dhaqan aan la qeexin.
- Hubi in qalad la soo bandhigay marka la tirtirayo tilmaame nooc aan dhammaystirnayn.
- Halbeegga lagu qeexo halbeegyada kala duwan ee ellipsis iyada oo aan lahayn comma hore (tusaale ahaan, marka la qeexayo "void e(int…)" halkii "wax madhan e(int, …)") waa la baabi'iyay.
- Isticmaalka macros si loogu dhawaaqo cutubyada waa mamnuuc.
- beddelka aan tooska ahayn ee qiimayaasha la tiriyey ee xisaabinta xisaabta waa la dhimay. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // deprecated int k = f - e; // deprecated int x = +f - e; // OK }
- Taageerada isbarbardhigga tooska ah ee safka waa la joojiyay. int arr1[5]; int arr2[5]; bool isla = arr1 == arr2;
- Fasalka template-ka-yar waa la joojiyay.
Source: opennet.ru
