C++ ဘာသာစကား၏ စံသတ်မှတ်ခြင်းဆိုင်ရာ ISO ကော်မတီ
လာမည့်နှစ်လတွင် အတည်ပြုထားသော သတ်မှတ်ချက်သည် ထုတ်ဝေရန်အတွက် စာရွက်စာတမ်းပြင်ဆင်သည့်အဆင့်တွင်ဖြစ်ပြီး စာလုံးပေါင်းအမှားအယွင်းများနှင့် typos များကို အယ်ဒီတာအဖွဲ့မှ ပြင်ဆင်ခြင်းလုပ်ငန်းကို ဆောင်ရွက်မည်ဖြစ်သည်။ နိုဝင်ဘာလအစောပိုင်းတွင်၊ ရရှိလာသောစာရွက်စာတမ်းအား တရားဝင်အမည် ISO/IEC 14882:2020 အောက်တွင်ထုတ်ဝေရန်အတွက် ISO သို့ပေးပို့မည်ဖြစ်ပါသည်။ ထိုအတောအတွင်း၊ ကော်မတီသည် လာမည့် C++23 စံနှုန်း (C++2b) တွင် စတင်လုပ်ဆောင်နေပြီဖြစ်ပြီး ၎င်း၏နောက်လာမည့် virtual အစည်းအဝေးတွင် ဖြစ်နိုင်သည့်ရွေးချယ်စရာများကို ထည့်သွင်းစဉ်းစားမည်ဖြစ်သည်။
- ထည့်သွင်းထားသော "အယူအဆများ"၊ ပုံစံပလိတ် ကန့်သတ်ဘောင်များ သတ်မှတ်ချက်များ အစုံအလင်ကို သတ်မှတ်ရန် ခွင့်ပြုသည့် တန်းပလိတ် တိုးချဲ့မှုများ၊ စုစည်းမှုအချိန်၌၊ ပုံစံပလိတ်ပါရာမီတာများအဖြစ် လက်ခံနိုင်သည့် အကြောင်းပြချက်အစုံကို ကန့်သတ်ထားသည်။ နမူနာပုံစံအတွင်းအသုံးပြုသည့် ဒေတာအမျိုးအစားများ၏ ဂုဏ်သတ္တိများနှင့် ထည့်သွင်းကန့်သတ်ဘောင်များ၏ ဒေတာအမျိုးအစားဂုဏ်သတ္တိများအကြား ယုတ္တိမညီသော သဘောတရားများကို ရှောင်ရှားရန် သဘောတရားများကို အသုံးပြုနိုင်သည်။
ပုံစံခွက်
EqualityComparable = လိုအပ်သည်(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } --> std::boolean;
}; - လက်ခံတယ်။
တိုးချဲ့ header files များအစား အသုံးပြုနိုင်သော module များနှင့် လုပ်ဆောင်ရန်အတွက်။ Modules များသည် “#include” မှတစ်ဆင့် ခေါင်းစီးဖိုင်များ မပါဝင်ဘဲ အစိတ်အပိုင်းများ၏ နယ်နိမိတ်များကို သတ်မှတ်ခြင်းအပေါ် အခြေခံ၍ အရင်းအမြစ်ကုဒ်ကို စုစည်းရန် နည်းလမ်းသစ်တစ်ခု ပေးပါသည်။ - ပြောင်းလဲနိုင်သော အငြင်းအခုံတွင် တိုကင်များရှိနေခြင်းအပေါ် မူတည်၍ ပြောင်းလဲနိုင်သော မက်ခရိုများအလိုက် လိုက်လျောညီထွေဖြစ်အောင် ချဲ့ထွင်ရန်အတွက် Macro __VA_OPT__။
- သုံးလမ်း နှိုင်းယှဉ်မှုအတွက် "" အော်ပရေတာအတွက် ပံ့ပိုးမှု။
- bitfields အတွက် ပုံသေဒြပ်စင် ကနဦးအသုံးပြုမှုများအတွက် ပံ့ပိုးမှု။
- lambda သည် "* this" အသုံးအနှုန်းများကို ဖမ်းယူနိုင်စွမ်း။
struct int_value {
int n = 0;
အလိုအလျောက် getter_fn() {
// ဆိုးသည်
// return [=]() { return n; };//ကောင်း:
return [=, *this]() { return n; };
}
}; - "const &" expression မှတဆင့် သတ်မှတ်ထားသော ယာယီအရာဝတ္ထုများသို့ pointer (Pointer-to-member) ဖြင့် ဒြပ်စင်များကို ခေါ်ဆိုခြင်း။
- စာရွက်စာတမ်းတွင်ဖော်ပြထားသော destructor ပါသောအော်ပရေတာကိုဖျက်ပါ။
P0722R1 . - အတန်းများသည် အမျိုးအစားမပါဘဲ နမူနာဘောင်များကို အသုံးပြုခွင့်ရှိသည်။
struct foo {
foo() = မူရင်း;
constexpr foo(int) {}
};ပုံစံခွက်
အလိုအလျောက် get_foo() {
ပြန်လာ f;
}get_foo(); // implicit constructor ကိုအသုံးပြုသည်။
get_foo ( ); - constructor ဖြင့် မတည်မြဲသော lambda အသုံးအနှုန်းများ။
- lambda စကားရပ်များအတွက် နမူနာပုံစံ အထားအသိုကို ခွင့်ပြုခြင်း (“အလိုအလျောက် f = [] (std::vector v)")။
- နမူနာဘောင်ဘောင်များတွင် string literals ကိုသုံးနိုင်သည်။
- C-စတိုင် ကနဦးသတ်မှတ်ခြင်းဆိုင်ရာ အထားအသိုအတွက် ပံ့ပိုးမှု - ကနဦးသတ်မှတ်ခြင်းစာရင်းတွင် အတိအလင်းဖော်ပြထားခြင်းမရှိသော အကွက်များကို ပုံသေအားဖြင့် အစပြုပါသည်။
တည်ဆောက်ပုံ A {
intx;
int y;
int z = 123;
};A a { .x = 1, .z = 2 }; // ax == 1, ay == 0, az == 2
- ဗလာဒေတာဖွဲ့စည်းပုံအဖွဲ့ဝင်များအတွက်ပံ့ပိုးမှု။
- ဖြစ်နိုင်ခြေရှိသော နှင့် ဖြစ်နိုင်ချေရှိသော ရည်ညွှန်းချက်များအတွက် ပံ့ပိုးကူညီသူအား အခြေအနေအရ တည်ဆောက်ခြင်း၏ ဖြစ်နိုင်ခြေအကြောင်း (“[[ဖြစ်နိုင်ဖွယ်]] if (random > 0) {“)။
- "for" ကွင်းဆက်တွင် ပြောင်းလဲနိုင်သော တန်ဖိုးများကို စတင်ရန် အပိုင်းအခြားများကို အသုံးပြုနိုင်သည်။
for (auto v = std::vector{1, 2, 3}; auto&e : v) {
- အသစ်တွင် array အရွယ်အစားကို အလိုအလျောက် တွက်ချက်ခြင်း (“new double[]{1,2,3}”);
- ဒေတာမရှိသော ကိန်းရှင်များသည် နေရာလွတ်မယူသည့် "[[no_unique_address]]" ရည်ညွှန်းချက်။
- အနုမြူညွှန်ပြချက်များ (std::atomic > နှင့် std::အနုမြူဗုံး >)။
- အခြေအနေအရဖော်ပြချက်များတွင် virtual လုပ်ဆောင်ချက်များကိုခေါ်ဆိုနိုင်မှု။
- ကိန်းသေများနှင့်သာ အလုပ်လုပ်နိုင်သော လက်ငင်းလုပ်ဆောင်ချက်များအတွက် ပံ့ပိုးမှု။
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 အမျိုးအစားအတွက် ပံ့ပိုးမှု ထပ်ထည့်ထားသည်။
- ခေါင်းစီးဖိုင်များကို ဘစ် (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