ISO C++ စံသတ်မှတ်ရေးကော်မတီ နိုင်ငံတကာအဆင့်မီ"“ခွဲထုတ်မှုတွေကလွဲရင် သတ်မှတ်ချက်မှာ တင်ပြနိုင်မှု၊ compilers များတွင် , и . ပရောဂျက်အတွင်း C++20 ကို ပံ့ပိုးပေးသည့် စံစာကြည့်တိုက်များကို အကောင်အထည်ဖော်သည်။ .
လာမည့်နှစ်လအတွင်း အတည်ပြုထားသော သတ်မှတ်ချက်သည် စာလုံးပေါင်းအမှားများနှင့် စာစီစာရိုက်အမှားများကို ပြင်ဆင်ရန်အတွက် တည်းဖြတ်မှုလုပ်ငန်းကို ဆောင်ရွက်သွားမည့် စာရွက်စာတမ်းပြင်ဆင်မှုအဆင့်တွင် ရှိနေမည်ဖြစ်သည်။ နိုဝင်ဘာလအစောပိုင်းတွင်၊ စာရွက်စာတမ်း၏ရလဒ်ဗားရှင်းကို ISO/IEC 14882:2020 တရားဝင်အမည်ဖြင့် ထုတ်ဝေရန်အတွက် ISO သို့ တင်ပြပါမည်။ ထိုအတောအတွင်း၊ ကော်မတီသည် လာမည့် C++23 စံနှုန်း (C++2b) ကို စတင်လုပ်ဆောင်နေပြီဖြစ်ပြီး ၎င်း၏နောက်လာမည့် virtual အစည်းအဝေးတွင် ဖြစ်နိုင်ခြေရှိသော တိုးတက်မှုများကို ထည့်သွင်းစဉ်းစားမည်ဖြစ်သည်။ .
():
- "သဘောတရားများ" ကိုထည့်သွင်းထားပြီး၊ တမ်းပလိတ်ပါရာမီတာများအတွက် လိုအပ်ချက်အစုံအလင်ကို သတ်မှတ်သတ်မှတ်နိုင်စေမည့် တင်းပလိတ်အဆက်အစပ်များကို စုစည်းထားချိန်တွင် ပုံစံပလိတ်ပါရာမီတာများအဖြစ် လက်ခံနိုင်သည့် အကြောင်းပြချက်အစုံကို ကန့်သတ်ထားသည်။ နမူနာပုံစံတစ်ခုအတွင်း အသုံးပြုသည့် ဒေတာအမျိုးအစားများ၏ ဂုဏ်သတ္တိများနှင့် ထည့်သွင်းကန့်သတ်ဘောင်များ၏ ဒေတာအမျိုးအစားများ၏ ဂုဏ်သတ္တိများအကြား ယုတ္တိမညီသော သဘောတရားများကို ရှောင်ရှားရန် သဘောတရားများကို အသုံးပြုနိုင်သည်။
ပုံစံခွက်
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 ပါသောအော်ပရေတာကိုဖျက်ပါ။ .
- အတန်းများသည် အမျိုးအစားမပါဘဲ နမူနာဘောင်များကို အသုံးပြုခွင့်ရှိသည်။
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
