C++20 ప్రమాణం ఆమోదించబడింది

C++ లాంగ్వేజ్ ప్రామాణీకరణపై ISO కమిటీ ఆమోదించబడింది అంతర్జాతీయ ప్రమాణం"C ++ 20". వివిక్త కేసులను మినహాయించి, స్పెసిఫికేషన్‌లో అందించబడిన సామర్థ్యాలు, మద్దతు ఇచ్చింది కంపైలర్లలో GCC, క్లాంగ్ и మైక్రోసాఫ్ట్ విజువల్ సి ++. C++20కి మద్దతు ఇచ్చే ప్రామాణిక లైబ్రరీలు ప్రాజెక్ట్‌లో అమలు చేయబడతాయి బూస్ట్.

తదుపరి రెండు నెలల్లో, ఆమోదించబడిన స్పెసిఫికేషన్ ప్రచురణ కోసం పత్రాన్ని సిద్ధం చేసే దశలో ఉంటుంది, దీనిలో స్పెల్లింగ్ లోపాలు మరియు అక్షరదోషాల సంపాదకీయ దిద్దుబాటుపై పని జరుగుతుంది. నవంబర్ ప్రారంభంలో, ఫలితంగా పత్రం ISO/IEC 14882:2020 అనే అధికారిక పేరుతో ప్రచురణ కోసం ISOకి పంపబడుతుంది. ఈలోగా, కమిటీ ఇప్పటికే తదుపరి C++23 ప్రమాణం (C++2b)పై పనిని ప్రారంభించింది మరియు దాని తదుపరి వర్చువల్ సమావేశంలో సాధ్యమయ్యే ఎంపికలను పరిశీలిస్తుంది. ఆవిష్కరణలు.

ప్రధాన особенности C ++ 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() {
    //చెడు:
    // రిటర్న్ [=]() {రిటర్న్ n; };

    // మంచిది:
    తిరిగి [=, *ఇది]() {తిరిగి n; };
    }
    };

  • పాయింటర్ (పాయింటర్-టు-మెంబర్) ద్వారా మూలకాలను కాల్ చేయడం, "const &" వ్యక్తీకరణ ద్వారా నిర్వచించబడిన తాత్కాలిక వస్తువులకు పాయింటర్‌లను ఉపయోగించడం.
  • పత్రంలో వివరించిన డిస్ట్రక్టర్‌తో తొలగింపు ఆపరేటర్ P0722R1.
  • తరగతులు రకం లేకుండా టెంప్లేట్ పారామితులను ఉపయోగించడానికి అనుమతించబడతాయి.

    నిర్మాణం foo {
    foo() = డిఫాల్ట్;
    constexpr foo(int) {}
    };

    టెంప్లేట్
    ఆటో get_foo() {
    తిరిగి f;
    }

    get_foo(); // అవ్యక్త కన్స్ట్రక్టర్‌ని ఉపయోగిస్తుంది
    పొందండి_ఫూ ();

  • కన్స్ట్రక్టర్‌తో నిరంతర లాంబ్డా వ్యక్తీకరణలు.
  • లాంబ్డా వ్యక్తీకరణల కోసం టెంప్లేట్ సింటాక్స్‌ను అనుమతిస్తుంది (“ఆటో f = [] (std:: వెక్టర్ v)").
  • టెంప్లేట్ పారామితులలో స్ట్రింగ్ అక్షరాలను ఉపయోగించగల సామర్థ్యం.
  • సి-స్టైల్ ఇనిషియలైజేషన్ సింటాక్స్ కోసం మద్దతు - ఇనిషియలైజేషన్ లిస్ట్‌లో స్పష్టంగా జాబితా చేయని ఫీల్డ్‌లు డిఫాల్ట్‌గా ప్రారంభించబడతాయి.

    నిర్మాణం A {
    intx;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // గొడ్డలి == 1, ay == 0, az == 2

  • ఖాళీ డేటా నిర్మాణ సభ్యులకు మద్దతు.
  • ట్రిగ్గర్ చేయబడే షరతులతో కూడిన నిర్మాణం యొక్క సంభావ్యత గురించి ఆప్టిమైజర్‌కు తెలియజేయడానికి అవకాశం మరియు అసంభవమైన లక్షణాలకు మద్దతు (“[[అవకాశం]] అయితే (యాదృచ్ఛిక > 0) {“).
  • "ఫర్" లూప్‌లో వేరియబుల్ విలువలను ప్రారంభించడానికి పరిధులను ఉపయోగించగల సామర్థ్యం

    కోసం (ఆటో v = std:: వెక్టర్{1, 2, 3}; ఆటో& ఇ : 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 తరగతి rgba_color_channel {ఎరుపు, ఆకుపచ్చ, నీలం, ఆల్ఫా};

    std::string_view to_string(rgba_color_channel my_channel) {
    మారండి (my_channel) {
    enum rgba_color_channelని ఉపయోగించడం;
    కేస్ ఎరుపు: తిరిగి "ఎరుపు";
    కేస్ ఆకుపచ్చ: తిరిగి "ఆకుపచ్చ";
    కేస్ బ్లూ: తిరిగి "నీలం";
    కేస్ ఆల్ఫా: రిటర్న్ "ఆల్ఫా";
    }
    }

  • సూచికలలో, నిర్వచించబడని ప్రవర్తన కారణంగా, ఆపరేషన్ “,” (“a[b,c]”) ఉపయోగించడం నిషేధించబడింది. అస్థిర కీవర్డ్‌తో డిక్లేర్డ్ చేయబడిన వేరియబుల్స్‌తో చాలా ఆపరేషన్‌లకు మద్దతు నిలిపివేయబడింది, ఇందులో ప్రామాణిక రకాలతో “++” మరియు “—” ఆపరేషన్‌లు కూడా ఉన్నాయి.
  • ఒక రకం ఉనికిని సూచించడానికి "టైపెనేమ్" అవసరమయ్యే పరిస్థితుల సంఖ్యను తగ్గించింది.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి