Nankatoavina ny fenitra C++ 26

Nankatoavin'ny komitin'ny fenitra amin'ny fiteny ISO C++ ny dikan-teny farany amin'ny famaritana izay mamorona ny fenitra iraisam-pirenena "C++26." Ireo endri-javatra aseho ao amin'ny famaritana dia efa tohanan'ny ampahany amin'ny mpamorona GCC, Clang, ary Microsoft Visual C++. Nampiharina tao anatin'ny tetikasa Boost ireo tranomboky mahazatra manohana ny C++26.

Ao anatin'ny roa volana manaraka, ny famaritana nekena dia handalo dingana fanomanana antontan-taratasy, izay hanaovana fanitsiana fanitsiana mba hanitsiana ireo lesoka amin'ny tsipelina sy ny tsipelina diso. Amin'ny fiandohan'ny volana Novambra, ny dika farany amin'ny antontan-taratasy dia halefa any amin'ny ISO mba havoaka amin'ny anarana ofisialy ISO/IEC 14882:2026.

Ireo endri-javatra fototra amin'ny C++26:

  • Nampiharina ireo singa fandaharana fifanarahana (Contracts), izay ahafahanao mamaritra ny famaritana ny interface amin'ny alàlan'ny fampiasana mpandraharaha telo vaovao: pre (precondition), post (postcondition), ary contract_assert (assertion check). Ny mpandraharaha "pre" dia mamaritra ny fepetra mialoha izay tsy maintsy fenoina alohan'ny antso (fanamarinana fidirana); ny "post" dia mamaritra ny fepetra izay tsy maintsy fenoina aorian'ny fanatanterahana (takiana amin'ny output); ny contract_assert dia mamaritra ny fepetra hananganana exceptions. Ho hita ao amin'ny GCC 16 ity endri-javatra ity. int f(const int x) pre (x != 1) // input requirements post (r : r == x && r != 2) // result requirements; r no sanda misy ny valiny { contract_assert (x != 3); return x; }
  • Nampiana ny fanohanana ny fisaintsainana, ahafahana manara-maso sy manova ireo singa ao amin'ny fandaharana amin'ny fotoana fanangonana. Nampiana ireo mpandraharaha vaovao "^^" hahazoana fampahalalana momba ny fananganana fitsipi-pitenenana sy "[:…:]" hanaovana ny fanovana mivadika. Atolotra ny tranomboky std::meta mba hanovana sy hikirakirana ny fampahalalana azo nandritra ny fizahana, ary misy ireo fahaiza-manao toy ny kajy misy tsy miovaova. Hisy fanohanana ny fisaintsainana ao amin'ny 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); // Samy hafa ny sandan'ny 'i' sy 'j'. static_assert(constant_of(^^i) == constant_of(^^j)); // Mitovy ny 'i' sy 'j' static_assert(^^i != std::meta::reflect_constant(42)); // tsy mitovy amin'ny sanda 42
  • Nampiana 'template for' ho an'ny famerenana amin'ny laoniny ireo singa toy ny fonosana paramètre, zavatra mitovy amin'ny tuple, ary valin'ny fisaintsainana (metaobjects) amin'ny fotoana fanangonana amin'ny fomba mahazatra for loop. Rehefa manatanteraka ny 'template for', dia mivelatra ho an'ny singa tsirairay ny vatan'ny loop, ary ny famerenana tsirairay dia karakaraina amin'ny sehatra misaraka izay tsy miova ny variable miovaova ao amin'ny loop. Ao anatin'ny tontolon'ny fisaintsainana, ny 'template for' dia azo ampiasaina hamerenana amin'ny laoniny ireo toetran'ny kilasy na enum. Ho hita ao amin'ny GCC 16 ity endri-javatra ity. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } dia hivelatra 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 = *(__begin + 0); static_assert(I < 4); } { constexpr int I = *(__begin + 1); static_assert(I < 4); } { constexpr int I = *(__begin + 2); static_assert(I < 4); } } }
  • Nampiana ny rafitra std::execution ho an'ny fanatanterahana kaody asynchronous sy parallel. Manome zavatra scheduler izy io, izay mamaritra ny work scheduler (thread, thread pool, GPU, event loop), zavatra sender, izay mamaritra ny asa hotanterahina, ary zavatra receiver, izay mikirakira ny valiny. mampiasa namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Manahoana izao tontolo izao! Manana int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
  • Nampiana ny tranomboky std::simd mba hampifanarahana ny asa angona amin'ny fampiasana andiana toromarika SIMD toy ny AVX-512 sy NEON amin'ny fampiasana ny rafitra karazana C++ mahazatra. std::simd a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; std::simd vokatra = a + b;
  • Aroso ny fampiharana ny vector (array) miovaova habe std::inplace_vector. Voatokana ao amin'ny stack izy io, ary ny habeny dia faritana amin'ny fotoana fanangonana. Mitovy amin'ny std::vector ny API, saingy voatahiry ao anatiny ny singa array, fa tsy ao amin'ny heap. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
  • Nampiana ny toromarika "#embed" mba hampidirana loharano binary ao anaty kaody. const unsigned char icon_display_data[] = { #embed "art.png" };
  • Nanampy fanohanana ho an'ny famoronana sy fikirakirana ireo exceptions amin'ny fotoana fanangonana rehefa misy lesoka ao anatin'ny context constexpr. constexpr std::optional checked_divide(tsy nasiana sonia n, tsy nasiana sonia d) { andramo { avereno divide(n, d); } misambotra (...) { avereno std::nullopt; } } constexpr daty parse_date(std::string_view input) { mandeha ho azy [marina, taona, volana, andro] = ctre::match<“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”>(fidirana); raha (!marina) { atsipy daty_tsy_marina{fidirana}; } avereno daty_fananganana(taona, volana, andro); }
  • Nampiharina ny rafitra angon-drakitra std::hive ho an'ny fitahirizana angon-drakitra tsy voalamina sy ny fampiasana indray ny fahatsiarovana afaka amin'ny singa voafafa. Nohatsaraina ho an'ny asa be dia be miaraka amin'ny fanampiana sy famafana singa amin'ny filaharana tsy voafehy ity rafitra ity. Tsy toy ny array, ny famafana singa ao amin'ny std::hive dia tsy mamindra singa hafa, fa manamarika ny singa voafafa ho foana, ary avy eo mameno ny toerana banga rehefa ampiana singa vaovao.
  • Nanampy tranomboky std::linalg miaraka amin'ny API mifototra amin'ny BLAS ho an'ny algebra linear.
  • Nanampy fanohanana ny rafitra fampifanarahana Hazard Pointer, izay misoroka ny famoahana ny fahatsiarovana ho an'ny zavatra idiran'ny kofehy hafa tsy misy hidy. Rehefa voafafa ny zavatra iray dia marihina ho voafafa ihany, fa ny fahatsiarovana misy ny zavatra dia avoaka rehefa avy namoaka ny teboka famantarana ny loza napetraka ny kofehy rehetra mandritra ny fidirana amin'ny zavatra.
  • Nampiana fanohanana ny rafitra fampifanarahana RCU (Read-Copy Update). Ny asa fanoratana dia mamorona ohatra vaovao amin'ilay zavatra, raha toa kosa ny asa famakiana tsy manakana, fa manohy miasa amin'ilay ohatra taloha. Rehefa vita ny fanovana, dia miasa ilay ohatra vaovao, ary misy asa famakiana vaovao atao aminy, raha toa kosa ka voafafa ilay ohatra taloha rehefa vita ny famakiana azy.
  • Nisy fanovana natao mba hanamafisana ny fiarovana ny tranomboky mahazatra, toy ny fanamarinana ny soatoavina manan-kery sy ny fihoaram-pefy amin'ny buffer. Ohatra, rehefa miditra amin'ny singa "constexpr reference operator[](size_type idx) const;", dia ampiana fanamarinana ny fepetra "idx < size()".
  • Ny fahafahana mampiasa ny teny fanalahidy constexpr miaraka amin'ny variant an'ny operator new (placement new) mba hametrahana zavatra ao amin'ny fahatsiarovana efa voatokana amin'ny fotoana fanangonana dia omena.
  • Nanampy fanohanana ho an'ny fifamatorana voarafitra ao amin'ny tontolon'ny "constexpr", midika izany fa ny referansa amin'ny fanehoana tsy miovaova dia mety ho fanehoana tsy miovaova ankehitriny. Ampiharina ho an'ny array sy rafitra tsotra ny fanohanana. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
  • Ny fatorana voarafitra izao dia manohana ny fehezan-teny "..." mba hamaritana ireo fonosana mirakitra ireo singa sisa ao amin'ny filaharana fanendrena. auto [x,y,z] = f(); // variables x, y, z dia ahitana ireo singa telo naverin'ny f(). fiara [...xs] = f(); // Package xs dia ahitana ny singa rehetra naverin'ny f(). fiara [x, ... rest] = f(); //x dia ahitana ny singa voalohany, ary ny ambiny dia ahitana ny ambiny. auto [x, y, ...rest] = f(); //x dia ahitana ny singa voalohany, ny y dia ahitana ny faharoa, ary ny ambiny dia ahitana ny fahatelo. fiara [x, ... rest, z] = f(); //x dia hisy ny voalohany, ny ambiny dia hisy ny faharoa, ary ny z dia hisy ny fahatelo.
  • Fanampiana fanampiny ho an'ny karazana "Trivial Relocatability", izay ahafahana manatsara ny fivezivezen'ny zavatra amin'ny karazana iray amin'ny alàlan'ny fametahana azy ireo amin'ny fitadidiana tsy misy fiantsoana mpanamboatra na mpandrava. Ny fananana memberwise_trivially_relocatable sy memberwise_replaceable dia ampiharina amin'ny kilasy, ary ny trivially_relocate_at sy trivially_relocate dia ampiana ho an'ny hetsika ambany amin'ny zavatra iray na maromaro.
  • Nampiharina ny fanohanana ho an'ny fampifandraisana ny fiasa main() amin'ny môdioly manerantany sy ny famaritana ny fiasa main() ao amin'ny môdioly nomena anarana.
  • Nampiana ny opérateur variable "friend" ("friend Ts...").
  • Attributa nampiharina ho an'ny fifandraisana voarafitra;
  • Nampiana ny fitsipiteny '= delete("antony")'.
  • Ny andiana endri-tsoratra fototra dia ahitana ny "@", "$", ary "`".
  • Omena ny fahafahana mampiasa structured binding ho toy ny fepetra ao amin'ny fanambarana "if" sy "switch".
  • Nampiana ny fahafahana mampiasa fari-pahaizan'ny toerana maromaro miaraka amin'ny anarana "_" ao anatin'ny sehatra iray, ohatra, ireto fanorenana manaraka ireto dia marina izao: struct S { int _, _; }; void func() { int _, _; } void hafa () { int _; // teo aloha dia nisy fampitandremana naseho tamin'ny -Wunused mode }
  • Azo atao ny mampiasa litera tady amin'ny toe-javatra iray izay tsy ampiasaina amin'ny fanombohana andian-tsoratra ary tsy miafara amin'ny kaody vokarina, fa ampiasaina amin'ny fotoana fanangonana fotsiny ho an'ny hafatra diagnostika sy ny fanodinana mialoha, ohatra, ho mason'ny torolàlana sy toetra _Pragma, asm, extern, static_assert, [[tsy ampiasaina]] ary [[nodiscard]].
  • Nampiana fiasa efa tafiditra: "__builtin_is_within_lifetime" mba hijerena raha misy safidy hafa miasa ao amin'ny union ary "__builtin_is_virtual_base_of" mba hijerena raha virtoaly ny kilasy fototra.
  • Nampihatra tsingerina tsy misy fiafarana tsy misy fiafarana tsy misy fitondran-tena voafaritra.
  • Natao izay hahazoana antoka fa misy hadisoana aseho rehefa mamafa pointer mankany amin'ny karazana tsy feno.
  • Ny syntax hamaritana ny masontsivana variadika misy ellipsis tsy misy faingo (ohatra, rehefa manondro "void e(int...)" fa tsy "void e(int, ...)") dia tsy ampiasaina intsony.
  • Voarara ny fampiasana macro hanambarana ny maody.
  • Tsy ampiasaina intsony ny fiovam-po an-kolaka amin'ireo sanda voatanisa ao anatin'ny kajy aritmetika. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // tsy ampiasaina intsony int k = f - e; // tsy ampiasaina intsony int x = +f - e; // OK }
  • Najanona ny fanohanana ny fampitahana mivantana ny array. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
  • Ny kilasy maodely is_trivial dia tsy ampiasaina intsony.

    Source: opennet.ru
Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster