C++20 စံနှုန်းကို အတည်ပြုခဲ့သည်။

ISO C++ စံသတ်မှတ်ရေးကော်မတီ အတည်ပြုခဲ့သည်။ နိုင်ငံတကာအဆင့်မီ"C ++ 20“ခွဲထုတ်မှုတွေကလွဲရင် သတ်မှတ်ချက်မှာ တင်ပြနိုင်မှု၊ ထောက်ခံသည် compilers များတွင် GCC, ခုတ်ထစ်ခြင်း။ и Microsoft က Visual C ++. ပရောဂျက်အတွင်း C++20 ကို ပံ့ပိုးပေးသည့် စံစာကြည့်တိုက်များကို အကောင်အထည်ဖော်သည်။ တိုးတက်မှု.

လာမည့်နှစ်လအတွင်း အတည်ပြုထားသော သတ်မှတ်ချက်သည် စာလုံးပေါင်းအမှားများနှင့် စာစီစာရိုက်အမှားများကို ပြင်ဆင်ရန်အတွက် တည်းဖြတ်မှုလုပ်ငန်းကို ဆောင်ရွက်သွားမည့် စာရွက်စာတမ်းပြင်ဆင်မှုအဆင့်တွင် ရှိနေမည်ဖြစ်သည်။ နိုဝင်ဘာလအစောပိုင်းတွင်၊ စာရွက်စာတမ်း၏ရလဒ်ဗားရှင်းကို ISO/IEC 14882:2020 တရားဝင်အမည်ဖြင့် ထုတ်ဝေရန်အတွက် ISO သို့ တင်ပြပါမည်။ ထိုအတောအတွင်း၊ ကော်မတီသည် လာမည့် C++23 စံနှုန်း (C++2b) ကို စတင်လုပ်ဆောင်နေပြီဖြစ်ပြီး ၎င်း၏နောက်လာမည့် virtual အစည်းအဝေးတွင် ဖြစ်နိုင်ခြေရှိသော တိုးတက်မှုများကို ထည့်သွင်းစဉ်းစားမည်ဖြစ်သည်။ တီထွင်ဆန်းသစ်မှုများ.

အဓိက အင်္ဂါရပ်များ C ++ 20 (ကုဒ်ဥပမာများ):

  • "သဘောတရားများ" ကိုထည့်သွင်းထားပြီး၊ တမ်းပလိတ်ပါရာမီတာများအတွက် လိုအပ်ချက်အစုံအလင်ကို သတ်မှတ်သတ်မှတ်နိုင်စေမည့် တင်းပလိတ်အဆက်အစပ်များကို စုစည်းထားချိန်တွင် ပုံစံပလိတ်ပါရာမီတာများအဖြစ် လက်ခံနိုင်သည့် အကြောင်းပြချက်အစုံကို ကန့်သတ်ထားသည်။ နမူနာပုံစံတစ်ခုအတွင်း အသုံးပြုသည့် ဒေတာအမျိုးအစားများ၏ ဂုဏ်သတ္တိများနှင့် ထည့်သွင်းကန့်သတ်ဘောင်များ၏ ဒေတာအမျိုးအစားများ၏ ဂုဏ်သတ္တိများအကြား ယုတ္တိမညီသော သဘောတရားများကို ရှောင်ရှားရန် သဘောတရားများကို အသုံးပြုနိုင်သည်။

    ပုံစံခွက်
    EqualityComparable = လိုအပ်သည်(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } --> std::boolean;
    };

  • ဖွဲ့စည်းမှုတွင် အောက်ပါတို့ကို လက်ခံထားသည်။ တိုးချဲ့ ခေါင်းစီးဖိုင်များအစား အသုံးပြုနိုင်သည့် modules များနှင့် လုပ်ဆောင်ရန်။ Modules များသည် "#include" မှတစ်ဆင့် ခေါင်းစီးဖိုင်များကို ထည့်သွင်းရန် မလိုအပ်ဘဲ အစိတ်အပိုင်းနယ်နိမိတ်များ သတ်မှတ်ခြင်းအပေါ် အခြေခံ၍ အရင်းအမြစ်ကုဒ်ကို စုစည်းရန် နည်းလမ်းသစ်တစ်ခု ပေးပါသည်။
  • ကွဲပြားသော အငြင်းအခုံများတွင် တိုကင်များရှိနေခြင်းအပေါ် မူတည်၍ အမျိုးမျိုးသော မက်ခရိုများအလိုက် လိုက်လျောညီထွေဖြစ်အောင် ချဲ့ထွင်ရန်အတွက် Macro __VA_OPT__။
  • သုံးလမ်း နှိုင်းယှဉ်မှုအတွက် "" အော်ပရေတာအတွက် ပံ့ပိုးမှု။
  • ဘစ်အကွက်များအတွက် ပုံသေဒြပ်စင် ကနဦးအသုံးပြုမှုများအတွက် ပံ့ပိုးမှု။
  • "* this" အသုံးအနှုန်းများကို lambda ဖမ်းယူနိုင်ခြေ။

    struct int_value {
    int n = 0;
    အလိုအလျောက် getter_fn() {
    // ဆိုးတယ်
    // return [=]() { return n; };

    //ကောင်း:
    return [=, *this]() { return n; };
    }
    };

  • "const &" စကားရပ်မှတစ်ဆင့် သတ်မှတ်ထားသော ယာယီအရာဝတ္ထုများသို့ ညွှန်ပြသူမှ အဖွဲ့ဝင်သို့ ဝင်ရောက်ခွင့်။
  • စာရွက်စာတမ်းတွင်ဖော်ပြထားသော destructor ပါသောအော်ပရေတာကိုဖျက်ပါ။ P0722R1.
  • အတန်းများသည် အမျိုးအစားမပါဘဲ နမူနာဘောင်များကို အသုံးပြုခွင့်ရှိသည်။

    struct foo {
    foo() = မူရင်း;
    constexpr foo(int) {}
    };

    ပုံစံခွက်
    အလိုအလျောက် get_foo() {
    ပြန်လာ f;
    }

    get_foo(); // implicit constructor ကိုအသုံးပြုသည်။
    get_foo ( );

  • constructor ဖြင့် မတည်မြဲသော lambda အသုံးအနှုန်းများ။
  • lambda အသုံးအနှုန်းများအတွက် နမူနာပုံစံ အထားအသိုကို အသုံးပြုခြင်းအတွက် ခွင့်ပြုချက် ('auto f = [] (std::vector v)»)။
  • နမူနာဘောင်ဘောင်များတွင် string literals ကိုသုံးနိုင်သည်။
  • C-စတိုင် ကနဦးသတ်မှတ်ခြင်းဆိုင်ရာ အထားအသိုအတွက် ပံ့ပိုးမှု - ကနဦးသတ်မှတ်ခြင်းစာရင်းတွင် အတိအလင်းဖော်ပြထားခြင်းမရှိသော အကွက်များကို ပုံသေအားဖြင့် အစပြုပါသည်။

    တည်ဆောက်ပုံ A {
    int x;
    int y;
    int z = 123;
    };

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

  • ဒေတာဖွဲ့စည်းပုံများ၏ အလွတ်အဖွဲ့ဝင်များအတွက် ပံ့ပိုးမှု။
  • ဖြစ်နိုင်ခြေရှိသော နှင့် ဖြစ်နိုင်ခြေရှိသော ရည်ညွှန်းချက်များအတွက် ပံ့ပိုးကူညီသူအား အခြေအနေအရ တည်ဆောက်မှုဖြစ်နိုင်ခြေအကြောင်း ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန် အကြောင်းကြားရန် ("[[likely]] if (random > 0) {")။
  • ကွင်းဆက်အတွက် အမျိုးမျိုးသောတန်ဖိုးများကို စတင်ရန် အပိုင်းအခြားများကို အသုံးပြုနိုင်သည်။

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

  • အသစ်ရှိ array အရွယ်အစားကို အလိုအလျောက် တွက်ချက်ခြင်း ("new double[]{1,2,3}");
  • "[[no_unique_address]]" ရည်ညွှန်းချက်သည် ဒေတာမရှိသော ကိန်းရှင်များသည် နေရာမယူကြောင်း သေချာစေသည်။
  • အနုမြူညွှန်ပြချက်များ (std::atomic > နှင့် std::အနုမြူဗုံး >)။
  • အခြေအနေအရဖော်ပြချက်များတွင် virtual လုပ်ဆောင်ချက်များကိုခေါ်ဆိုနိုင်မှု။
  • ကိန်းသေများနှင့်သာ အလုပ်လုပ်နိုင်သော လက်ငင်းလုပ်ဆောင်ချက်များအတွက် ပံ့ပိုးမှု။

    const int sqr(int n) {
    ပြန်လာ n * n;
    }

    constexpr int r = sqr(100); // အိုကေ
    int x = 100;
    int r2 = sqr(x); // ERROR: 'x' ကို ကိန်းသေအဖြစ် အသုံးမပြုနိုင်ပါ။

  • virtual functions ("constexpr virtual int f() const { return 2; }") ဖြင့် constexpr ကို အသုံးပြုရန် ဖြစ်နိုင်ခြေရှိသည်။
  • စံပြစာကြည့်တိုက်တွင်-
    • UTF-8 စာကြောင်းများအတွက် char8_t အမျိုးအစားအတွက် ပံ့ပိုးမှု ထပ်ထည့်ထားသည်။
    • ဘစ် (bit operations) နှင့် ဗားရှင်း ခေါင်းစီးဖိုင်များကို ထည့်ထားသည်။
    • ယခု ၎င်းသည် စာကြောင်းများ၏ ရှေ့ဆက်နှင့် နောက်ဆက်တွဲ (starts_with, ends_with) ကို စစ်ဆေးနိုင်ပါပြီ။
    • ထည့်သွင်းထားသော 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 သို့ array များအတွက် ပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။
    • array-like objects များကို std::array သို့ပြောင်းရန် std::to_array လုပ်ဆောင်ချက်ကို ထည့်သွင်းထားသည်။
  • စာရင်းကောက်ခြင်းအတွက် ပိုအဆင်ပြေသော syntax

    enum အတန်းအစား rgba_color_channel { အနီ၊ အစိမ်း၊ အပြာ၊ အယ်လ်ဖာ };

    std::string_view to_string(rgba_color_channel my_channel) {
    ပြောင်းရန် (my_channel) {
    enum rgba_color_channel ကို အသုံးပြု၍
    အနီရောင်- "အနီရောင်" ပြန်လာ;
    case green: return "green";
    အပြာရောင်- "အပြာ" ပြန်လာ;
    case alpha- "alpha" ကို ပြန်ပေးသည်။
    }
    }

  • သတ်မှတ်မထားသောအပြုအမူကြောင့် "," ("a[b,c]") အော်ပရေတာအား အညွှန်းများတွင် ခွင့်မပြုတော့ပါ။ စံအမျိုးအစားများအတွက် "++" နှင့် "—" အော်ပရေတာများအပါအဝင် မတည်ငြိမ်သောသော့ချက်စကားလုံးဖြင့် ကြေငြာထားသော variable များပေါ်တွင် လုပ်ဆောင်မှုအများစုကို ပံ့ပိုးမပေးပါ။
  • အမျိုးအစားတစ်ခု၏ပါဝင်မှုကိုညွှန်ပြရန် "typename" ကိုသတ်မှတ်ရန်လိုအပ်သည့်အခြေအနေများအရေအတွက်ကိုလျှော့ချသည်။

source: opennet.ru

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster