C++20 معیاري تصویب شو

د C++ ژبې د معیاري کولو په اړه د ISO کمیټه تصویب شوی نړیوال معیار "C ++ 20". په مشخصاتو کې وړاندې شوي وړتیاوې، د جلا قضیو په استثنا سره، ملاتړ شوی په کمپیلرونو کې GCC, زنګ وهل и د مایکروسافټ لید C++. معیاري کتابتونونه چې د C++20 ملاتړ کوي په پروژه کې پلي کیږي د بست.

په راتلونکو دوو میاشتو کې، تصویب شوي توضیحات به د خپرولو لپاره د سند چمتو کولو په مرحله کې وي، په کوم کې چې د املا د غلطیو او ټایپونو د سمون په اړه کار ترسره کیږي. د نومبر په پیل کې، پایله لرونکی سند به د ISO/IEC 14882:2020 رسمي نوم لاندې د خپرولو لپاره ISO ته واستول شي. په ورته وخت کې ، کمیټې دمخه په راتلونکي C++ 23 معیار (C++2b) کار پیل کړی او په راتلونکي مجازی ناسته کې به احتمالي اختیارونه په پام کې ونیسي. نوښتونه.

اصلي د C ++ 20 (د کوډ مثالونه):

  • اضافه شوي "مفکورې"، د ټیمپلیټ توسیعونه، چې تاسو ته اجازه درکوي د ټیمپلیټ پیرامیټرو اړتیاو سیټ تعریف کړئ چې د تالیف په وخت کې، د دلیلونو سیټ محدود کړي چې د ټیمپلیټ پیرامیټونو په توګه منل کیدی شي. مفاهیم د ټیمپلیټ دننه کارول شوي ډیټا ډولونو ملکیتونو او د ان پټ پیرامیټرو ډیټا ډول ملکیتونو ترمینځ د منطقي تضادونو مخنیوي لپاره کارول کیدی شي.

    کينډۍ
    د مساوات مفهوم = اړتیا (T a, T b) {
    { a == b } -> std:: boolean;
    {a != b } -> std::boolean;
    };

  • ومنل شو پراختیا د ماډلونو سره کار کولو لپاره چې د سرلیک فایلونو پرځای کارول کیدی شي. موډلونه د "#شامل" له لارې د سرلیک فایلونو شاملولو پرته د اجزاو د حدودو ټاکلو پراساس د سرچینې کوډ تنظیم کولو لپاره نوې لاره چمتو کوي.
  • میکرو __VA_OPT__ د متغیر میکرو د تطبیق وړ توسعې لپاره چې په متغیر دلیل کې د توکیو شتون پورې اړه لري.
  • د درې اړخیز پرتله کولو لپاره د "" آپریټر لپاره ملاتړ.
  • د بټ فیلډونو لپاره د ډیفالټ عنصر پیل کونکو لپاره ملاتړ.
  • د لامبډا د نیولو وړتیا "* دا" څرګندونې.

    جوړښت int_value {
    int n = 0 ;
    auto getter_fn() {
    // بد:
    // راستنیدنه [=]() { بیرته راستنیدنه n; };

    // ښه:
    راستنیدنه [=, *دا]() { بیرته راستنیدنه n; };
    }
    };

  • د پوائنټر په واسطه عناصرو ته زنګ وهل (د پوائنټر څخه غړي)، لنډمهاله شیانو ته د اشارې په کارولو سره چې د "const &" بیان له لارې تعریف شوي.
  • د حذف کولو آپریټر د ویجاړونکي سره په سند کې بیان شوی P0722R1.
  • ټولګیو ته اجازه ورکول کیږي چې پرته له ډول څخه د ټیمپلیټ پیرامیټونه وکاروي.

    جوړښت foo {
    foo() = ډیفالټ؛
    constexpr foo(int) {}
    };

    کينډۍ
    اوتومات get_foo() {
    راستنیدنه f;
    }

    get_foo(); // ضمني جوړونکي کاروي
    get_foo ();

  • د جوړونکي سره غیر دوامداره لامبډا څرګندونې.
  • د لامبډا څرګندونو لپاره د ټیمپلیټ ترکیب ته اجازه ورکول ("آټو f = [] (std::vector v)").
  • د ټیمپلیټ پیرامیټونو کې د سټینګ لیکونو کارولو وړتیا.
  • د C-style ابتدايي ترکیب لپاره ملاتړ - هغه ساحې چې په ښکاره ډول د ابتدايي لیست کې لیست شوي ندي د ډیفالټ لخوا پیل شوي.

    جوړښت A {
    انټ ایکس؛
    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::اتومي > او std::اتومي >).
  • په مشروط بیانونو کې د مجازی افعال غږولو وړتیا.
  • د فوري دندو لپاره ملاتړ چې یوازې د ثابت سره کار کولی شي.

    consteval int sqr(int n) {
    بیرته راستنیدنه n * n;
    }

    constexpr int r = sqr(100); // سمه ده
    int x = 100
    int r2 = sqr(x); // تېروتنه: '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 ته د اریونو لپاره ملاتړ اضافه شوی.
    • د std::to_array فنکشن اضافه شوی ترڅو د صف په څیر شیان std::array ته واړوي.
  • د شمیرنې ډیر اسانه ترکیب:

    د enum ټولګي rgba_color_channel {سور، شنه، نیلي، الفا}؛

    std::string_view to_string(rgba_color_channel my_channel) {
    بدل کړئ (زما_چینل) {
    د enum rgba_color_channel کارول؛
    سور قضیه: بیرته "سر"؛
    شنه قضیه: بیرته "شین"؛
    نیلي قضیه: بیرته "نیلي"؛
    د الفا قضیه: بیرته "الفا"؛
    }
    }

  • په شاخصونو کې، د نه تعریف شوي چلند له امله، د عملیاتو کارول "،" ("a[b،c]") منع دي. د بې ثباته کلیدي کلمې سره اعلان شوي متغیرونو سره د ډیری عملیاتو لپاره ملاتړ بند شوی ، پشمول د معیاري ډولونو سره "++" او "—" عملیات.
  • د هغه حالتونو شمیر کم شوی چې په کوم کې د ډول شتون په ګوته کولو لپاره "ټایپین نوم" اړین دی.

سرچینه: opennet.ru

Add a comment