Ikomidi lokumisa izilimi le-ISO C++ livumile inguqulo yokugcina yencazelo eyakha indinganiso yamazwe ngamazwe ethi "C++26." Izici ezethulwe kuncazelo sezivele zisekelwa ngokwengxenye kuma-compilers e-GCC, e-Clang, kanye ne-Microsoft Visual C++. Amalabhulali ajwayelekile asekela i-C++26 aseqalisiwe ngaphakathi kwephrojekthi ye-Boost.
Ezinyangeni ezimbili ezizayo, imininingwane evunyiwe izodlula esigabeni sokulungiselela amadokhumenti, lapho kuzolungiswa khona ukuhlela ukuze kulungiswe amaphutha esipelingi kanye namaphutha okubhala. Ekuqaleni kukaNovemba, inguqulo yokugcina yale dokhumenti izothunyelwa ku-ISO ukuze ishicilelwe ngaphansi kwegama elisemthethweni elithi ISO/IEC 14882:2026.
Izici ezibalulekile ze-C++26:
- Kusetshenziswe izakhi zokuhlela inkontileka (Izinkontileka), ezikuvumela ukuthi uchaze imininingwane yesikhombimsebenzisi esisemthethweni usebenzisa opharetha abathathu abasha: pre (precondition), post (postcondition), kanye ne-contract_assert (assert check). Umsebenzisi "wangaphambi" uchaza imibandela okumele ihlangatshezwane nayo ngaphambi kocingo (ukuqinisekiswa kokufaka); "post" ichaza imibandela okumele ihlangatshezwane nayo ngemuva kokwenziwa (izidingo zokukhipha); contract_assert ichaza imibandela yokuphakamisa okuhlukile. Lesi sici sizotholakala ku-GCC 16. int f(const int x) pre (x!= 1) // izidingo zokufaka post (r : r == x && r!= 2) // izidingo zomphumela; r inani elinomphumela { contract_assert (x!= 3); buyisela x; }
- Kungezwe ukwesekwa kokuzindla, okuvumela izakhi zohlelo ukuthi zibonwe futhi zilungiswe ngesikhathi sokuhlanganiswa. Ama-opharetha amasha "^^" okuthola ulwazi lwe-meta mayelana nokwakhiwa kohlelo lolimi kanye "[:…:]" okwenza ushintsho oluphambeneyo angeziwe. Umtapo wolwazi we-std::meta unikezwa ukuguqula nokucubungula ulwazi olutholwe ngesikhathi sokuhlolwa, futhi izici ezifana nokubala ngama-constant ziyatholakala. Ukusekelwa kokuzindla kuzongezwa ku-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' kanye no-'j' banamanani ahlukene. static_assert(constant_of(^^i) == constant_of(^^j)); // 'i' kanye no-'j' bafana static_assert(^^i != std::meta::reflect_constant(42)); // kuhlukile kunenani elingu-42
- Kungezwe 'ithempulethi ye' yokuphindaphinda phezu kwezinto ezifana namaphakethe epharamitha, izinto ezifana ne-tuple, kanye nemiphumela yokuzindla (ama-metaobjects) ngesikhathi sokuhlanganiswa ngesitayela se-loop ejwayelekile ye-for. Lapho kwenziwa 'ithempulethi ye', umzimba we-loop uyandiswa wento ngayinye, futhi ukuphindaphinda ngakunye kucutshungulwa endaweni ehlukile lapho ukushintsha okuguquguqukayo ku-loop kuhlala njalo. Kumongo wokuzindla, 'ithempulethi ye' ingasetshenziswa ukuphindaphinda phezu kwezakhiwo zamakilasi noma ama-enum. Lesi sici sizotholakala ku-GCC 16. void f() { ithempulethi ye-(constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } izonwebeka ku: 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); } } }
- Uhlaka lwe-std::execution olungeziwe lokwenziwa kwekhodi engavumelani kanye nehambisanayo. Lunikeza izinto zeshejuli, ezichaza ishejuli yomsebenzi (uchungechunge, i-thread pool, i-GPU, i-event loop), izinto zeshejuli, ezichaza umsebenzi ozokwenziwa, kanye nezinto ze-receiver, ezisingatha umphumela. usebenzisa i-namespace std::execution; ishejuli auto sch = thread_pool.scheduler(); i-sender auto begin = schedule(sch); i-sender auto hi = then(begin, []{ std::cout < "Sawubona mhlaba! Yiba ne-int."; buyisela 13; }); i-sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
- Umtapo wolwazi we-std::simd wengezwe ukuze kuhambisane imisebenzi yedatha kusetshenziswa amasethi emiyalelo ye-SIMD njenge-AVX-512 kanye ne-NEON kusetshenziswa uhlelo olujwayelekile lohlobo lwe-C++. a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; umphumela we-std::simd = a + b;
- Kuphakanyiswa ukusetshenziswa kwevektha yosayizi oguquguqukayo (i-array) std::inplace_vector. Ibekwe esitakini, ubukhulu baso bunqunywa ngesikhathi sokuhlanganiswa. I-API ifana ne-std::vector, kodwa izakhi ze-array zigcinwa ngaphakathi, hhayi esiqongweni. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
- Isiqondiso esithi "#embed" sesengeziwe ukuze kufakwe izinsiza ze-binary kukhodi. const unsigned char icon_display_data[] = { #embed "art.png" };
- Kungezwe ukwesekwa kokukhiqiza nokusingatha okuhlukile ngesikhathi sokuhlanganiswa lapho kwenzeka amaphutha kumongo we-constexpr. constexpr std::optional i-checked_divide(engasayiniwe n, engasayiniwe d) { zama { buyisela ukwahlukanisa(n, d); } catch (...) { buyisela i-std::nullopt; } } usuku lwe-constexpr parse_date(std::string_view input) { auto [elungile, unyaka, inyanga, usuku] = ctre::match<“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”>(input); uma (!elungile) { phonsa usuku_olungayilunganga{input}; } buyisela usuku_lokwakha(unyaka, inyanga, usuku); }
- Isakhiwo sedatha ye-std::hive sisetshenziswe ukugcina idatha okungahleliwe kanye nokusetshenziswa kabusha kwememori ekhululwe yizinto ezisusiwe. Isakhiwo senzelwe imisebenzi eminingi ngokungezwa okukhulu kanye nokususwa kwezinto ngokulandelana okungahleliwe. Ngokungafani nama-array, ukususa i-element ku-std::hive akushintshi ezinye izinto, kodwa kunalokho kumaka i-element esusiwe njengengenalutho, bese kugcwalisa isikhundla esingenalutho lapho kufakwa i-element entsha.
- Kungezwe umtapo wolwazi we-std::linalg one-API esekelwe ku-BLAS ye-algebra eqondile.
- Kungezwe ukwesekwa kwendlela yokuvumelanisa i-Hazard Pointer, evimbela ukukhishwa kwememori yezinto ezifinyelelwa ngezinye izintambo ngaphandle kokukhiya. Uma into isusiwe, imakwa kuphela njengesusiwe, kodwa imemori ehlalwa yinto ikhishwa kuphela ngemva kokuba zonke izintambo sezikhiphe isethi yesikhombisi sengozi ngesikhathi sokufinyelela into.
- Kungezwe ukwesekwa kwendlela yokuvumelanisa ye-RCU (Read-Copy Update). Imisebenzi yokubhala idala isenzakalo esisha sento, kuyilapho imisebenzi yokufunda ingavimbi, kodwa iyaqhubeka nokusebenza nesenzakalo esidala. Ngemva kokuthi ushintsho seluqediwe, isenzakalo esisha siyasebenza, futhi imisebenzi yokufunda emisha yenziwa kuso, kuyilapho isenzakalo esidala sisuswa ngemva kokuba imicu yokusifunda isiqediwe.
- Kwenziwe izinguquko zokuqinisa ukuphepha komtapo wolwazi ojwayelekile, njengokuhlola amanani avumelekile kanye nokweqa kwe-buffer. Isibonelo, uma ufinyelela i-element ethi "constexpr reference operator[](size_type idx) const;", kufakwe isheke sesimo esithi "idx < size()".
- Ikhono lokusebenzisa igama elingukhiye le-constexpr elinohlobo lwe-opharetha omusha (ukubekwa okusha) lokufaka into kwimemori ebekwe kusengaphambili ngesikhathi sokuhlanganiswa linikezwa.
- Kungezwe ukwesekwa kwezibopho ezihlelekile kumongo we-"constexpr", okusho ukuthi izinkomba zezinkulumo ezihlala njalo manje sezingaba yizinkulumo ezihlala njalo ngokwazo. Usekelo lusetshenziswa kuma-array kanye nezakhiwo ezilula. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Izibopho ezihlelekile manje zisekela i-syntax ethi "..." ukuze ucacise amaphekhi athwebula inani elisele lezinto ngokulandelana komsebenzi ozokwenziwa. okuzenzakalelayo [x,y,z] = f(); // okuguquguqukayo x, y, z kuzoqukatha izakhi ezintathu ezibuyiswe ngu-f(). okuzenzakalelayo [...xs] = f(); // iphakheji xs izoqukatha zonke izakhi ezibuyiswe ngu-f(). okuzenzakalelayo [x, ...phumla] = f(); // x izoqukatha isici sokuqala, futhi ukuphumula kuzoqukatha okusele. okuzenzakalelayo [x, y, ...rest] = f(); // x izoqukatha i-elementi yokuqala, y izoqukatha eyesibili, futhi ukuphumula kuzoqukatha okwesithathu. okuzenzakalelayo [x, ...phumula, z] = f(); // x izoqukatha eyokuqala, okusele kuyoqukatha okwesibili, futhi u-z kuyoqukatha okwesithathu.
- Usekelo olungeziwe "lwe-Trivial Relocatability" yezinhlobo, okuvumela ukuthuthukisa ukunyakaza kwezinto zohlobo olunikeziwe ngokuzihlanganisa kumemori ngaphandle kokubiza abakhi noma ababhidlizi. Izakhiwo ze- memberwise_trivially_relocatable and memberwise_replaceable zisetshenziswa emakilasini, kanye nemisebenzi ye-trivially_relocate_at and trivially_relocate yengezwa ekunyakazeni kwezinga eliphansi lento eyodwa noma ngaphezulu.
- Kusetshenziswe ukwesekwa kokunamathisela umsebenzi we-main() kumojula womhlaba wonke kanye nokuchaza umsebenzi we-main() kumamojula aqanjwe ngamagama.
- Kungezwe i-opharetha eguquguqukayo ethi "umngane" ("umngane u-Ts...").
- Izimfanelo ezisetshenzisiwe zezibopho ezihlelekile;
- I-syntax engeziwe '= susa("isizathu")'.
- Isethi yezinhlamvu eziyisisekelo ihlanganisa u-"@", "$", kanye no-"`".
- Ikhono lokusebenzisa ukubopha okuhlelekile njengesimo kuzitatimende ze-if kanye ne-switch linikeziwe.
- Kwengezwe ikhono lokusebenzisa okuguquguqukayo kwesibambi sendawo okunegama elithi “_” kusikophu esisodwa, isibonelo, lezi zakhiwo ezilandelayo sezilungile: isakhiwo S {int _, _; }; i-void func() {int _, _; } vala okunye() {int _; // ngaphambilini isixwayiso saboniswa kumodi -Wunused }
- Kungenzeka ukusebenzisa iyunithi yezinhlamvu ezingokoqobo kumongo lapho angasetshenziswa khona ukuqalisa uhlu lwabalingiswa futhi angagcini kukhodi ewumphumela, kodwa asetshenziswa kuphela ngesikhathi sokuhlanganisa imilayezo yokuxilonga nokucubungula kusengaphambili, isibonelo, njengemingcele iziqondiso nezimfanelo _Pragma, asm, extern, static_assert, [[yehlisiwe]] kanye ne-[[nodiscard]].
- Kwengezwe imisebenzi eyakhelwe ngaphakathi: "__builtin_is_within_lifetime" ukuhlola ukuthi ingabe enye indlela iyasebenza kuma-union kanye ne-"__builtin_is_virtual_base_of" ukuhlola ukuthi ngabe ikilasi lesisekelo liyi-virtual.
- Kusetshenziswe izihibe ezingenamkhawulo ezincane ngaphandle kokuziphatha okungachazwanga.
- Kuqinisekiswe ukuthi kukho iphutha eliboniswayo lapho kususwa inkomba kuhlobo olungaphelele.
- I-syntax yokuchaza amapharamitha e-variadic ane-ellipsis ngaphandle kokhefana owandulelayo (isibonelo, uma kucaciswa okuthi "void e(int...)" esikhundleni sokuthi "void e(int, ...)") yehlisiwe.
- Ukusetshenziswa kwama-macros ukumemezela amamojula akuvunyelwe.
- Ukuguqulwa okungabonakali kwamanani abalwe ekubalweni kwezibalo kuye kwancishiswa. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // kwehlisiwe int k = f - e; // kwehlisiwe int x = +f - e; // Kulungile }
- Usekelo lokuqhathanisa uhlu oluqondile lumisiwe. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
- Isigaba sesifanekiso se-is_trivial sihoxisiwe.
Source: opennet.ru
