C ++20 መደበኛ ጸድቋል

የ C ++ ቋንቋን ደረጃውን የጠበቀ ISO ኮሚቴ ጸድቋል ዓለም አቀፍ ደረጃ"ሲ ++ 20". ከተገለሉ ጉዳዮች በስተቀር በዝርዝሩ ውስጥ የቀረቡት ችሎታዎች ፣ የተደገፈ በአቀነባባሪዎች ውስጥ GCC, ክላንግ и Microsoft Visual C ++. C++20ን የሚደግፉ መደበኛ ቤተ-መጻሕፍት በፕሮጀክቱ ውስጥ ተተግብረዋል። አዳበረ.

በሚቀጥሉት ሁለት ወራት ውስጥ, የተፈቀደው ዝርዝር ሰነዱን ለህትመት በማዘጋጀት ደረጃ ላይ ይሆናል, በዚህ ጊዜ የፊደል ስህተቶችን እና የፊደል ስህተቶችን በማረም ላይ ሥራ ይከናወናል. በኖቬምበር መጀመሪያ ላይ፣ የተገኘው ሰነድ ISO/IEC 14882፡2020 በሚለው መደበኛ ስም ወደ ISO እንዲታተም ይላካል። ይህ በእንዲህ እንዳለ ኮሚቴው በሚቀጥለው የC++23 ስታንዳርድ (C++2b) ላይ ስራ ጀምሯል እና በሚቀጥለው የቨርቹዋል ስብሰባው ሊሆኑ የሚችሉ አማራጮችን ይመለከታል። ፈጠራዎች.

ዋና ባህሪያት ሲ ++ 20 (የኮድ ምሳሌዎች):

  • የታከሉ "ፅንሰ-ሀሳቦች"፣ የአብነት ማራዘሚያዎች፣ ይህም የአብነት መለኪያ መስፈርቶችን ስብስብ እንዲገልጹ የሚያስችልዎ፣ በማጠናቀር ጊዜ፣ እንደ አብነት መመዘኛዎች ተቀባይነት ያላቸውን ነጋሪ እሴቶች ስብስብ የሚገድቡ። ፅንሰ-ሀሳቦቹ በአብነት ውስጥ ጥቅም ላይ በሚውሉት የውሂብ አይነቶች ባህሪያት እና በግቤት ግቤቶች የውሂብ አይነት ባህሪያት መካከል ሎጂካዊ አለመግባባቶችን ለማስወገድ ጥቅም ላይ ሊውሉ ይችላሉ.

    አብነት
    ፅንሰ-ሀሳብ እኩልነት ሊወዳደር የሚችል = ይጠይቃል (T a, T b) {
    {a == b } -> std:: ቡሊያን;
    {a != b } -> std:: boolean;
    };

  • ተቀባይነት አግኝቷል ማስፋፋት ከራስጌ ፋይሎች ይልቅ ጥቅም ላይ ሊውሉ ከሚችሉ ሞጁሎች ጋር ለመስራት. ሞጁሎች የአካላትን ወሰን በመግለጽ ላይ በመመስረት የምንጭ ኮድን ለማደራጀት አዲስ መንገድ ይሰጣሉ፣ የራስጌ ፋይሎችን በ"#include" ሳያካትት።
  • ማክሮ __VA_OPT__ በተለዋዋጭ ክርክር ውስጥ ባሉ ቶከኖች ላይ በመመስረት ለተለዋዋጭ ማክሮዎች አስማሚ ማስፋፊያ።
  • የሶስት መንገድ ንጽጽር ለ "" ኦፕሬተር ድጋፍ.
  • ለቢትፊልድ ነባሪ አባል ጀማሪዎች ድጋፍ።
  • Lambda "* ይህን" አባባሎችን የመቅረጽ ችሎታ።

    መዋቅር int_value {
    int n = 0;
    auto getter_fn() {
    // መጥፎ፡
    // መመለስ [=]() {መመለስ n; };

    // ጥሩ:
    መመለስ [=, *ይህ] () {መመለስ n; };
    }
    };

  • አባሎችን በጠቋሚ (ከጠቋሚ ወደ አባል) መጥራት፣ በ"const &" አገላለጽ ወደ ተገለጹ ጊዜያዊ ነገሮች ጠቋሚዎችን በመጠቀም።
  • ሰርዝ ኦፕሬተር በሰነዱ ውስጥ ከተገለጸ አጥፊ ጋር P0722R1.
  • ክፍሎች ያለ የአብነት መለኪያዎችን እንዲጠቀሙ ተፈቅዶላቸዋል።

    መዋቅር foo {
    foo () = ነባሪ;
    constexpr foo(int) {}
    };

    አብነት
    auto get_fo() {
    መመለስ f;
    }

    get_fo(); // ስውር ገንቢ ይጠቀማል
    አግኝ_ፎ ();

  • ከግንባታ ጋር የማያቋርጥ የላምዳ መግለጫዎች።
  • ለ lambda አባባሎች የአብነት አገባብ መፍቀድ ("auto f = [] (std :: ቬክተር v)))።
  • በአብነት መለኪያዎች ውስጥ የሕብረቁምፊ ቃል በቃል የመጠቀም ችሎታ።
  • ለ C-style ማስጀመሪያ አገባብ ድጋፍ - በመነሻ ዝርዝር ውስጥ በግልጽ ያልተዘረዘሩ መስኮች በነባሪነት ተጀምረዋል።

    መዋቅር A {
    intx;
    int y;
    int z = 123;
    };

    አ {.x = 1, .z = 2}; // መጥረቢያ = 1 ፣ ay = 0 ፣ አዝ == 2

  • ባዶ የውሂብ መዋቅር አባላት ድጋፍ.
  • ሁኔታዊ ግንባታው የመቀስቀስ እድልን (“[[ምናልባትም]] ከሆነ ( በዘፈቀደ > 0) {“) ለአመቻቹ ለማሳወቅ ለሚችሉ እና ለማይችሉ ባህሪዎች ድጋፍ።
  • በ "ለ" loop ውስጥ ተለዋዋጭ እሴቶችን ለመጀመር ክልሎችን የመጠቀም ችሎታ

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

  • የድርድር መጠን በራስ ሰር ስሌት በአዲስ ("አዲስ ድርብ[]{1,2,3}");
  • ዳታ የሌላቸው ተለዋዋጮች ቦታ የማይይዙበት የ"[[ልዩ_አድራሻ]]" መለያ ባህሪ።
  • የአቶሚክ ጠቋሚዎች (std :: አቶሚክ > እና std :: አቶሚክ >)
  • በሁኔታዊ መግለጫዎች ውስጥ ምናባዊ ተግባራትን የመጥራት ችሎታ።
  • ከቋሚዎች ጋር ብቻ ሊሰሩ ለሚችሉ ፈጣን ተግባራት ድጋፍ.

    consteval int ስኩዌር (int n) {
    መመለስ n * n;
    }

    constexpr int r = sqr (100); // እሺ
    int x = 100;
    int r2 = ካሬ (x); // ስህተት: 'x' እንደ ቋሚ ጥቅም ላይ ሊውል አይችልም

  • ኮንስተፕርን በምናባዊ ተግባራት የመጠቀም እድል ("constexpr virtual int f() const {መመለስ 2; }")።
  • በመደበኛ ቤተ-መጽሐፍት ውስጥ;
    • ለ char8_t አይነት ለUTF-8 ሕብረቁምፊዎች ድጋፍ ታክሏል።
    • የታከሉ የራስጌ ፋይሎች ቢት (ቢት ኦፕሬሽኖች) እና ስሪት።
    • አሁን የሕብረቁምፊዎችን ቅድመ ቅጥያ እና ቅጥያ ማረጋገጥ ተችሏል (በጀመረው_በየጨረሰ)።
    • ታክሏል std :: remove_cvref፣ std :: unwrap_reference፣ std :: unwrap_decay_ref፣ std :: is_nothrow_convertible እና std ::አይነት_ማንነት ባህሪያት።
    • ታክሏል ተግባራት std :: midpoint, std :: lep, std :: bind_front, std :: ምንጭ_ቦታ, std :: ይጎብኙ, std ::is_constant_የተገመገመ እና std :: እንደገመቱት.
    • ለ std :: make_share ድጋፍ ለድርድር ታክሏል።
    • አደራደር የሚመስሉ ነገሮችን ወደ std:: ድርድር ለመቀየር std:: ወደ_ድርድር ተግባር ታክሏል።
  • የበለጠ ምቹ የቁጥር አገባብ፡-

    enum class rgba_color_channel {ቀይ፣ አረንጓዴ፣ ሰማያዊ፣ አልፋ};

    std ::ሕብረቁምፊ_እይታ ወደ_string(rgba_color_channel my_channel) {
    ቀይር (የእኔ_ቻናል) {
    enum rgba_color_channel በመጠቀም;
    ጉዳይ ቀይ: መመለስ "ቀይ";
    መያዣ አረንጓዴ: "አረንጓዴ" መመለስ;
    መያዣ ሰማያዊ: "ሰማያዊ" መመለስ;
    ጉዳይ አልፋ: "አልፋ" መመለስ;
    }
    }

  • በመረጃ ጠቋሚዎች ውስጥ ባልተገለጸ ባህሪ ምክንያት ኦፕሬሽኑን "," ("a[b,c]") መጠቀም የተከለከለ ነው. "++" እና "-" ኦፕሬሽኖችን ከመደበኛ ዓይነቶች ጋር ጨምሮ በተለዋዋጭ ቁልፍ ቃል ለተገለጸው የብዙ ኦፕሬሽኖች ድጋፍ ተቋርጧል።
  • አንድ ዓይነት መኖሩን ለማመልከት "የመተየብ ስም" የሚያስፈልግባቸው ሁኔታዎች ብዛት ቀንሷል.

ምንጭ: opennet.ru

አስተያየት ያክሉ