C++20 தரநிலை அங்கீகரிக்கப்பட்டது

C++ மொழியின் தரப்படுத்தல் மீதான ISO குழு அங்கீகரிக்கப்பட்டது சர்வதேச தரநிலை"சி ++ 20". தனிமைப்படுத்தப்பட்ட நிகழ்வுகளைத் தவிர, விவரக்குறிப்பில் வழங்கப்பட்ட திறன்கள், ஆதரித்தது தொகுப்பிகளில் ஜிசிசி, கணகண வென்ற சப்தம் и மைக்ரோசாஃப்ட் விஷுவல் சி ++. C++20 ஐ ஆதரிக்கும் நிலையான நூலகங்கள் திட்டத்தில் செயல்படுத்தப்படுகின்றன பூஸ்ட்.

அடுத்த இரண்டு மாதங்களில், அங்கீகரிக்கப்பட்ட விவரக்குறிப்பு வெளியீட்டிற்கான ஆவணத்தைத் தயாரிக்கும் கட்டத்தில் இருக்கும், அதில் எழுத்துப் பிழைகள் மற்றும் எழுத்துப் பிழைகளை தலையங்கத் திருத்தம் செய்யும் பணி மேற்கொள்ளப்படும். நவம்பர் தொடக்கத்தில், இதன் விளைவாக ஆவணம் ISO/IEC 14882:2020 என்ற முறையான பெயரில் வெளியிடுவதற்கு ISO க்கு அனுப்பப்படும். இதற்கிடையில், குழு ஏற்கனவே அடுத்த C++23 தரநிலையில் (C++2b) பணியைத் தொடங்கியுள்ளது மற்றும் அதன் அடுத்த மெய்நிகர் கூட்டத்தில் சாத்தியமான விருப்பங்களை பரிசீலிக்கும். புதுமைகள்.

முக்கிய அம்சங்கள் சி ++ 20 (குறியீடு எடுத்துக்காட்டுகள்):

  • தொகுக்கும் நேரத்தில், டெம்ப்ளேட் அளவுருக்களாக ஏற்றுக்கொள்ளக்கூடிய வாதங்களின் தொகுப்பைக் கட்டுப்படுத்தும் வார்ப்புரு அளவுரு தேவைகளின் தொகுப்பை வரையறுக்க உங்களை அனுமதிக்கும் "கருத்துகள்", டெம்ப்ளேட் நீட்டிப்புகள் சேர்க்கப்பட்டது. டெம்ப்ளேட்டிற்குள் பயன்படுத்தப்படும் தரவு வகைகளின் பண்புகள் மற்றும் உள்ளீட்டு அளவுருக்களின் தரவு வகை பண்புகளுக்கு இடையே உள்ள தர்க்கரீதியான முரண்பாடுகளைத் தவிர்க்க கருத்துகள் பயன்படுத்தப்படலாம்.

    டெம்ப்ளேட்
    கருத்து சமத்துவம் ஒப்பிடக்கூடியது = தேவை(T a, T b) {
    { a == b } -> std:: boolean;
    { a != b } -> std:: boolean;
    };

  • ஏற்றுக்கொள்ளப்பட்டது விரிவாக்கம் தலைப்புக் கோப்புகளுக்குப் பதிலாகப் பயன்படுத்தக்கூடிய தொகுதிகளுடன் பணிபுரிய. "#include" மூலம் தலைப்புக் கோப்புகளைச் சேர்க்காமல், கூறுகளின் எல்லைகளை வரையறுப்பதன் அடிப்படையில் மூலக் குறியீட்டை ஒழுங்கமைக்க தொகுதிகள் புதிய வழியை வழங்குகின்றன.
  • மேக்ரோ __VA_OPT__ மாறி மேக்ரோக்களின் தகவமைப்பு விரிவாக்கத்திற்கான மாறி வாதத்தில் டோக்கன்கள் இருப்பதைப் பொறுத்து.
  • மூன்று வழி ஒப்பீட்டுக்கான "" ஆபரேட்டருக்கான ஆதரவு.
  • பிட்ஃபீல்டுகளுக்கான இயல்புநிலை உறுப்பு துவக்கிகளுக்கான ஆதரவு.
  • "*இந்த" வெளிப்பாடுகளை லாம்ப்டா கைப்பற்றும் திறன்.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //மோசம்:
    // திரும்ப [=]() { return n; };

    // நல்ல:
    திரும்ப [=, *இது]() {திரும்ப n; };
    }
    };

  • "கான்ஸ்ட் &" வெளிப்பாட்டின் மூலம் வரையறுக்கப்பட்ட தற்காலிகப் பொருட்களுக்கான சுட்டிகளைப் பயன்படுத்தி, சுட்டிக்காட்டி (பாயின்டர்-டு-மெம்பர்) மூலம் உறுப்புகளை அழைத்தல்.
  • ஆவணத்தில் விவரிக்கப்பட்டுள்ள டிஸ்ட்ரக்டருடன் நீக்கு ஆபரேட்டர் P0722R1.
  • வகை இல்லாமல் டெம்ப்ளேட் அளவுருக்களைப் பயன்படுத்த வகுப்புகள் அனுமதிக்கப்படுகின்றன.

    struct foo {
    foo() = default;
    constexpr foo(int) {}
    };

    டெம்ப்ளேட்
    auto get_foo() {
    திரும்ப f;
    }

    get_foo(); // மறைமுகமான கட்டமைப்பாளரைப் பயன்படுத்துகிறது
    get_foo ();

  • கன்ஸ்ட்ரக்டருடன் நிலையான லாம்ப்டா வெளிப்பாடுகள்.
  • லாம்ப்டா வெளிப்பாடுகளுக்கான டெம்ப்ளேட் தொடரியல் அனுமதிக்கிறது (“auto f = [] (std::vector v)").
  • டெம்ப்ளேட் அளவுருக்களில் சரம் எழுத்துகளைப் பயன்படுத்தும் திறன்.
  • சி-பாணி துவக்க தொடரியல் ஆதரவு - துவக்க பட்டியலில் வெளிப்படையாக பட்டியலிடப்படாத புலங்கள் முன்னிருப்பாக துவக்கப்படும்.

    ஒரு {
    முழு எண்ணாக x;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // கோடாரி == 1, ay == 0, az == 2

  • வெற்று தரவு கட்டமைப்பு உறுப்பினர்களுக்கான ஆதரவு.
  • நிபந்தனைக்குட்பட்ட கட்டுமானம் தூண்டப்படுவதற்கான நிகழ்தகவு பற்றி உகப்பாக்கிக்கு தெரிவிக்க வாய்ப்புள்ள மற்றும் சாத்தியமில்லாத பண்புக்கூறுகளுக்கான ஆதரவு (“[[சாத்தியம்]] என்றால் (ரேண்டம் > 0) {“).
  • "for" லூப்பில் மாறி மதிப்புகளை துவக்க வரம்புகளைப் பயன்படுத்தும் திறன்

    (auto 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_nthrow_convertible மற்றும் std::type_identity traits.
    • சேர்க்கப்பட்ட செயல்பாடுகள் std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated மற்றும் std::assume_aligned.
    • std::make_shared க்கு வரிசைகளுக்கான ஆதரவு சேர்க்கப்பட்டது.
    • வரிசை போன்ற பொருட்களை std::array ஆக மாற்ற std::to_array செயல்பாடு சேர்க்கப்பட்டது.
  • மிகவும் வசதியான எண்ணியல் தொடரியல்:

    enum class rgba_color_channel {சிவப்பு, பச்சை, நீலம், ஆல்பா};

    std::string_view to_string(rgba_color_channel my_channel) {
    மாறு (my_channel) {
    enum rgba_color_channel ஐப் பயன்படுத்துதல்;
    வழக்கு சிவப்பு: திரும்ப "சிவப்பு";
    வழக்கு பச்சை: திரும்ப "பச்சை";
    வழக்கு நீலம்: திரும்ப "நீலம்";
    வழக்கு ஆல்பா: திரும்ப "ஆல்பா";
    }
    }

  • குறியீடுகளில், வரையறுக்கப்படாத நடத்தை காரணமாக, "" ("a[b,c]") செயல்பாட்டைப் பயன்படுத்துவது தடைசெய்யப்பட்டுள்ளது. நிலையான வகைகளுடன் கூடிய “++” மற்றும் “—” செயல்பாடுகள் உட்பட, மாறுபாடுள்ள முக்கிய வார்த்தையுடன் அறிவிக்கப்பட்ட மாறிகள் கொண்ட பெரும்பாலான செயல்பாடுகளுக்கான ஆதரவு நிறுத்தப்பட்டது.
  • ஒரு வகை இருப்பதைக் குறிக்க "வகைப்பெயர்" தேவைப்படும் சூழ்நிலைகளின் எண்ணிக்கை குறைக்கப்பட்டது.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்