Standarti C++20 është miratuar

Komiteti ISO pĂ«r standardizimin e gjuhĂ«s C++ miratoi standardi ndĂ«rkombĂ«tar “C++20“. MundĂ«sitĂ« e paraqitura nĂ« specifikim, pĂ«rveç rasteve tĂ« veçanta, mbĂ«shteten nĂ« kompajlerĂ«t GCC, Clang dhe Microsoft Visual C++. Bibliotekat standarde qĂ« mbĂ«shtesin C++20 janĂ« realizuar nĂ« kuadĂ«r tĂ« projektit Boost.

Në dy muajt e ardhshëm, specifikimi i miratuar do të jetë në fazën e përgatitjes së dokumentit për publikim, gjatë së cilës do të kryhet puna për redaktimin e gabimeve ortografike dhe gabimeve tjera. Në fillim të nëntorit, versioni përfundimtar i dokumentit do të dërgohet në ISO për publikim nën emrin formal ISO/IEC 14882:2020. Ndërkohë, komiteti tashmë ka filluar punën për standardin e ardhshëm C++23 (C++2b) dhe në takimin e ardhshëm virtual do të shqyrtojë shembujt e mundshëm risitë.

Ndryshimet kryesore karakteristika C++20 (shembujt e kodit):

  • JanĂ« shtuar “konceptet”, zgjerime tĂ« shabllonĂ«ve qĂ« lejojnĂ« tĂ« pĂ«rcaktohen grupe kĂ«rkesash pĂ«r parametrat e shabllonit, tĂ« cilat gjatĂ« kompajlimit kufizojnĂ« grupin e argumenteve qĂ« mund tĂ« pranojnĂ« si parametra shabllonash. Konceptet mund tĂ« pĂ«rdoren pĂ«r tĂ« shmangur mospĂ«rputhjet logjike mes tipareve tĂ« tipeve tĂ« dhĂ«nash qĂ« pĂ«rdoren brenda shabllonit dhe tipareve tĂ« tipeve tĂ« dhĂ«nash tĂ« parametrave tĂ« hyrjes.

    template
    concept EqualityComparable = requires(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • NĂ« pĂ«rbĂ«rje janĂ« pranuar shtesĂ«s pĂ«r tĂ« punuar me modulat, tĂ« cilat mund tĂ« pĂ«rdoren nĂ« vend tĂ« skedarĂ«ve titullues. ModulĂ«t ofrojnĂ« njĂ« mĂ«nyrĂ« tĂ« re pĂ«r organizimin e teksteve burimore bazuar nĂ« pĂ«rcaktimin e kufijve tĂ« komponenteve, pa skedarĂ«t titullues tĂ« pĂ«rfshirĂ« me “#include”.
  • Makroja __VA_OPT__ pĂ«r zbulimin adaptiv tĂ« makrosĂ«ve variativĂ« nĂ« varĂ«si tĂ« pranisĂ« sĂ« tokeneve nĂ« argumentin variativ.
  • MbĂ«shtetje pĂ«r operatorin “” pĂ«r krahasimin trepalĂ«sh.
  • MbĂ«shtetje pĂ«r inicializuesit e elementeve tĂ« parazgjedhur pĂ«r fushat bit.
  • MundĂ«sia e kapjes sĂ« shprehjeve “*this” nga lambda.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    // BAD:
    // return [=]() { return n; };

    // GOOD:
    return [=, *this]() { return n; };
    }
    };

  • Thirrja e elementeve pĂ«rmes pointerĂ«ve (Pointer-to-member), duke pĂ«rdorur pointerĂ«t e pĂ«rcaktuar pĂ«rmes shprehjes “const &” pĂ«r objektet e pĂ«rkohshme.
  • Operatori delete me destruktori, i pĂ«rshkruar nĂ« dokumentin P0722R1.
  • Klasat u lejohet tĂ« pĂ«rdorin parametrat e shabllonit pa tip.

    struct foo {
    foo() = default;
    constexpr foo(int) {}
    };

    template
    auto get_foo() {
    return f;
    }

    get_foo(); // përdor konstruktorin e implicit
    get_foo();

  • Lambdat e pa ruajtura me konstruktor.
  • PranueshmĂ«ria pĂ«r pĂ«rdorimin e sintaksĂ«s sĂ« shabllonĂ«ve pĂ«r lambdat (“auto f = [](std::vector v)” ).
  • MundĂ«sia e pĂ«rdorimit tĂ« literalĂ«ve string nĂ« parametrat e shabllonit.
  • MbĂ«shtetje pĂ«r sintaksĂ«n e inicializimit nĂ« stilin C – fushat qĂ« nuk janĂ« shprehur qartĂ« nĂ« listĂ«n e inicializimit, inicializohen me parazgjedhje.

    struct A {
    int x;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2

  • MbĂ«shtetje pĂ«r anĂ«tarĂ« tĂ« zbrazĂ«t tĂ« strukturave tĂ« dhĂ«nash.
  • MbĂ«shtetje pĂ«r atributet likely dhe unlikely pĂ«r tĂ« informuar optimizuesin pĂ«r probabilitetin e realizimit tĂ« njĂ« strukture kushtore (“[[likely]] if (random > 0) {“).
  • MundĂ«sia e pĂ«rdorimit tĂ« intervaleve pĂ«r inicializimin e vlerave tĂ« variablit nĂ« ciklin “for”

    for (auto v = std::vector{1, 2, 3}; auto& e : v) {

  • Llogaritja autonome e madhĂ«sisĂ« sĂ« vargut nĂ« new (“new double[]{1,2,3}”);
  • Atributi “[[no_unique_address]]” nĂ«n tĂ« cilin variablĂ«t pa tĂ« dhĂ«na nuk zĂ«nĂ« hapĂ«sirĂ«.
  • Pointera atomikĂ« (std::atomic<shared_ptr> dhe std::atomic<weak_ptr>).
  • MundĂ«sia e thirrjes sĂ« funksioneve virtuale nĂ« shprehje kushtore.
  • MbĂ«shtetje pĂ«r funksione tĂ« shpejta (immediate), tĂ« cilat mund tĂ« punojnĂ« vetĂ«m me constante.

    consteval int sqr(int n) {
    return n * n;
    }

    constexpr int r = sqr(100); // OK
    int x = 100;
    int r2 = sqr(x); // ERROR: 'x' nuk mund të përdoret si constante

  • MundĂ«sia e aplikimit tĂ« constexpr me funksione virtuale (“constexpr virtual int f() const { return 2; }”).
  • NĂ« bibliotekĂ«n standarde:
    • Shtuar mbĂ«shtetje pĂ«r tipin char8_t pĂ«r stringjet UTF-8.
    • Shtuar skedarĂ« titullues bit (operacionet bitore) dhe version.
    • Krijuar mundĂ«sia e kontrollit tĂ« prefiksit dhe suffixit tĂ« stringjeve (starts_with, ends_with).
    • Shtuar tiparet std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible dhe std::type_identity.
    • Shtuar funksionet std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated dhe std::assume_aligned.
    • NĂ« std::make_shared Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r vargjet.
    • Shtuar funksioni std::to_array pĂ«r tĂ« shndĂ«rruar objekte tĂ« ngjashme me varg nĂ« std::array.
  • SintaksĂ« mĂ« tĂ« lehtĂ« pĂ«r enumeratat:

    enum class rgba_color_channel { red, green, blue, alpha };

    std::string_view to_string(rgba_color_channel my_channel) {
    switch (my_channel) {
    using enum rgba_color_channel;
    case red: return “red”;
    case green: return “green”;
    case blue: return “blue”;
    case alpha: return “alpha”;
    }
    }

  • NĂ« indekset pĂ«r shkak tĂ« sjelljeve tĂ« pasaktĂ«sive Ă«shtĂ« ndaluar pĂ«rdorimi i operacionit “,” (“a[b,c]”). Ndalohet mbĂ«shtetje pĂ«r shumicĂ«n e operacioneve me variablat qĂ« janĂ« shpallur me fjalĂ« kyçe volatile, duke pĂ«rfshirĂ« ndalimin e operacioneve “++” dhe “--” me tipet standard.
  • U reduktua numri i situatave ku kĂ«rkohet tregimi “typename” pĂ«r tĂ« informuar mbi praninĂ« e tipit.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster