C++ 20 معيار منظور ٿيل

C++ ٻوليءَ جي معيار تي ISO ڪميٽي منظور ٿيل بين الاقوامي معيار"سي ++ 20". خاصيتن ۾ پيش ڪيل صلاحيتون، ڌار ڌار ڪيسن جي استثنا سان، حمايت ڪئي compilers ۾ جي سي سي, ڪلانگ и Microsoft بصري سي ++. C++ 20 جي سپورٽ ڪندڙ معياري لائبريريون منصوبي ۾ لاڳو ڪيون ويون آهن فروغ.

ايندڙ ٻن مهينن ۾، منظور ٿيل تفصيلات اشاعت لاءِ دستاويز تيار ڪرڻ جي مرحلي ۾ هوندي، جنهن ۾ اسپيل جي غلطين ۽ ٽائپس جي ايڊيٽوريل اصلاح تي ڪم ڪيو ويندو. نومبر جي شروعات ۾، نتيجو وارو دستاويز ISO/IEC 14882:2020 جي رسمي نالي هيٺ اشاعت لاءِ ISO ڏانهن موڪليو ويندو. ساڳئي وقت ۾، ڪميٽي اڳ ۾ ئي ايندڙ C++ 23 معيار (C++2b) تي ڪم شروع ڪري ڇڏيو آهي ۽ پنهنجي ايندڙ ورچوئل ميٽنگ ۾ ممڪن اختيارن تي غور ڪندي. جدت.

مکيه особенности سي ++ 20 (ڪوڊ جا مثال):

  • شامل ڪيو ويو "تصورات"، ٽيمپليٽ ايڪسٽينشن، جيڪي توهان کي ٽيمپليٽ پيراميٽر جي ضرورتن جو هڪ سيٽ بيان ڪرڻ جي اجازت ڏين ٿيون جيڪي، مرتب ڪرڻ وقت، دليلن جي سيٽ کي محدود ڪن ٿيون جيڪي ٽيمپليٽ پيٽرولر طور قبول ڪري سگهجن ٿيون. تصورات کي استعمال ڪري سگھجي ٿو منطقي تضاد کان بچڻ لاءِ ڊيٽا جي قسمن جي ملڪيتن جي وچ ۾ استعمال ٿيل ٽيمپليٽ ۽ ڊيٽا جي قسم جي ملڪيتن جي ان پٽ پيٽرولن جي.

    ٽيمپليٽ
    تصور EqualityComparable = گھربل (T a، T b) {
    { a == b } -> std:: boolean؛
    {a != b } -> std::boolean;
    };

  • قبول ڪيو وڌايو ماڊلز سان ڪم ڪرڻ لاءِ جيڪي هيڊر فائلن جي بدران استعمال ڪري سگھجن ٿيون. ماڊيول هڪ نئون طريقو مهيا ڪن ٿا ماخذ ڪوڊ کي ترتيب ڏيڻ جي بنياد تي حصن جي حدن کي بيان ڪرڻ جي، بغير هيڊر فائلن کي "#شامل" ذريعي.
  • ميڪرو __VA_OPT__ متغير ميڪروز جي موافقت وڌائڻ لاءِ متغير دليل ۾ ٽوڪن جي موجودگي تي منحصر آهي.
  • ٽن طرفن جي مقابلي لاءِ "" آپريٽر لاءِ سپورٽ.
  • بٽ فيلڊس لاءِ ڊفالٽ عنصر شروعاتي لاءِ سپورٽ.
  • ليمبڊا کي پڪڙڻ جي صلاحيت "*هي" اظهار.

    struct int_value {
    int n = 0 ;
    خودڪار getter_fn() {
    //خراب:
    // موٽڻ [=]() { واپسي ن؛ }؛

    // سٺو:
    واپسي [=, *هي]() { واپسي ن؛ }؛
    }
    };

  • پوائنٽر ذريعي عناصر کي سڏيندي (پوائنٽر کان ميمبر)، اشارو استعمال ڪندي عارضي شين ڏانهن اشارو ڪندي بيان ڪيل "const &" اظهار ذريعي.
  • ڊليٽ آپريٽر ڊسٽرڪٽ سان گڏ بيان ڪيل دستاويز ۾ پي 0722 آر 1.
  • طبقن کي اجازت آهي ته ٽيمپليٽ پيٽرولر استعمال ڪرڻ جي بغير ڪنهن قسم جي.

    struct foo {
    foo() = ڊفالٽ؛
    constexpr foo (int) {}
    };

    ٽيمپليٽ
    خودڪار get_foo() {
    واپسي f؛
    }

    get_foo(); // implicit Constructor استعمال ڪري ٿو
    get_foo ()؛

  • تعمير ڪندڙ سان غير مسلسل لامبڊا اظهار.
  • ليمبڊا ايڪسپريسشن لاءِ ٽيمپليٽ نحو جي اجازت ڏيڻ (“خودڪار f = [] (std::vector v)").
  • ٽيمپليٽ پيٽرولر ۾ اسٽرنگ لٽرلز استعمال ڪرڻ جي صلاحيت.
  • سي طرز جي شروعاتي نحو لاءِ سپورٽ - فيلڊز جيڪي واضح طور تي شروعاتي لسٽ ۾ درج نه ڪيا ويا آھن ڊفالٽ طور تي شروع ڪيا ويا آھن.

    struct A {
    انٽر x ؛
    int y؛
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // ax == 1، ay == 0، az == 2

  • خالي ڊيٽا جي جوڙجڪ جي ميمبرن لاء سپورٽ.
  • امڪاني ۽ غير امڪاني خاصيتن جي مدد لاءِ اصلاح ڪندڙ کي ڄاڻڻ لاءِ مشروط ٺاھڻ جي امڪان جي باري ۾ (“[[شايد]] جيڪڏھن (بي ترتيب > 0) {“).
  • "لاء" لوپ ۾ متغير قدرن کي شروع ڪرڻ لاءِ حدون استعمال ڪرڻ جي صلاحيت

    لاءِ (خودڪار v = std::vector{1, 2, 3}; auto&e : v) {

  • نئين ۾ صف جي سائيز جو خودڪار حساب ڪتاب ("نئون ڊبل[]{1,2,3}")؛
  • "[[no_unique_address]]" وصف جنهن ۾ متغير ڊيٽا کان سواءِ جاءِ نه کڻندا آهن.
  • ايٽمي اشارو (std::atomic > ۽ std::atomic >).
  • مشروط اظهار ۾ مجازي افعال کي سڏڻ جي صلاحيت.
  • فوري ڪمن لاءِ سپورٽ جيڪي صرف مستقل سان ڪم ڪري سگھن ٿيون.

    consteval int sqr (int n) {
    واپسي n * n؛
    }

    constexpr int r = sqr (100)؛ // ٺيڪ
    int x = 100؛
    int r2 = sqr(x)؛ // ERROR: 'x' مستقل طور استعمال نٿو ڪري سگھجي

  • مجازي افعال سان constexpr استعمال ڪرڻ جو امڪان (“constexpr virtual int f() const { return 2; }”).
  • معياري لائبريري ۾:
    • UTF-8 تارن لاءِ char8_t قسم جي مدد شامل ڪئي وئي.
    • شامل ڪيل هيڊر فائلون بٽ (بٽ آپريشن) ۽ ورزن.
    • اهو هاڻي ممڪن آهي ته اڳي ۽ لاڳاپي جي اسٽرنگ کي چيڪ ڪريو (شروعات_ سان، ختم_ سان).
    • شامل ڪيو ويو std::remove_cvref، std::unwrap_reference، std::unwrap_decay_ref، std::is_nothrow_convertible ۽ std::type_identity خاصيتون.
    • شامل ڪيل افعال std::midpoint، std::lerp، std::bind_front، std::source_location، std::visit، std::is_constant_evaluated ۽ std::assume_aligned.
    • std::make_shared ۾ arrays لاءِ سپورٽ شامل ڪئي وئي.
    • شامل ڪيو ويو std::to_array فنڪشن کي ترتيب ڏيڻ لاءِ array-like objects std::array ۾.
  • وڌيڪ آسان ڳڻپيوڪر نحو:

    enum ڪلاس rgba_color_channel {لال، سائو، نيرو، الفا}؛

    std::string_view to_string(rgba_color_channel my_channel) {
    مٽايو (my_channel) {
    enum rgba_color_channel استعمال ڪندي؛
    ڪيس ڳاڙهو: واپسي "لال"؛
    ڪيس سائو: واپسي "سائي"؛
    ڪيس نيرو: واپسي "نيرو"؛
    صورت الفا: واپسي "الفا"؛
    }
    }

  • انڊيڪسس ۾، اڻ ڄاڻايل رويي جي ڪري، آپريشن جو استعمال "،" ("a[b،c]") منع ٿيل آهي. volatile keyword سان اعلان ڪيل متغيرن سان اڪثر آپريشنز لاءِ سپورٽ بند ڪئي وئي آهي، بشمول “++” ۽ “—” آپريشن معياري قسمن سان.
  • حالتن جو تعداد گھٽايو جنھن ۾ قسم جي موجودگي کي ظاھر ڪرڻ لاء "ٽائپنام" گھربل آھي.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو