सी ++ 20
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
| C++ language revisions |
|---|
C++20, C++ प्रोग्रामिंग भाषा के लिए मानकीकरण के लिए अंतर्राष्ट्रीय संगठन/अंतर्राष्ट्रीय इंटरनेशनल इलेक्ट्रोटेक्नीकल कमीशन मानक का एक संस्करण है। C++20 ने C++ मानक के पूर्व संस्करण को बदल दिया, जिसे C++17 कहा जाता है।[1] मानक को तकनीकी रूप से अंतिम रूप दिया गया था[2] फरवरी 2020 में प्राहा में बैठक में ISO/IEC JTC 1/SC 22 द्वारा,[3] 4 सितंबर 2020 को स्वीकृत,[4][5] और दिसंबर 2020 में प्रकाशित हुआ।[6]
सुविधाएँ
C++20 C++14 या C++17 की तुलना में अधिक नई प्रमुख विशेषताएं जोड़ता है।[7] C++20 में स्वीकार किए गए परिवर्तनों में शामिल हैं:[8]
भाषा
- अवधारणाएं (सी ++),[9] संक्षिप्त वाक्य रचना के साथ[10]
- मॉड्यूलर प्रोग्रामिंग[11]
- नामित प्रारंभकर्ता[12] (C99 फीचर और सामान्य GNU जीएनयू संकलक संग्रह|g++ एक्सटेंशन पर आधारित)
[=, this]लैम्ब्डा कैप्चर के रूप में[13]- लैम्ब्डा में टेम्पलेट पैरामीटर सूची[14]
- स्पेसशिप ऑपरेटर का उपयोग करके तीन-तरफ़ा तुलना,
operator <=> - एक श्रेणी-आधारित के भीतर एक अतिरिक्त चर का आरंभीकरण
forकथन[15] - बिना मूल्यांकित संदर्भों में लैम्ब्डा[16][17]
- डिफ़ॉल्ट रचनात्मक और असाइन करने योग्य स्टेटलेस लैम्ब्डा[16][18]
- लैम्ब्डा इनिट-कैप्चर में पैक विस्तार की अनुमति दें[16][19]
- गैर-प्रकार के टेम्पलेट पैरामीटर में वर्ग प्रकार, स्ट्रिंग अक्षर को टेम्पलेट पैरामीटर के रूप में भी अनुमति देता है[20]
- की आवश्यकता को दूर करना
typenameकुछ निश्चित परिस्थितियों में[21] - नए मानक गुण
[[no_unique_address]],[22][[likely]]और[[unlikely]][23] - सशर्त
explicit, अनुमति देता हैexplicitएक बूलियन अभिव्यक्ति पर आकस्मिक होने के लिए संशोधक[24] - विस्तारित
constexpr: आभासी कार्य,[25]union,[26]tryऔरcatch,[27]dynamic_castऔरtypeid,[28]std::pointer_traits[29] - नए का उपयोग कर तत्काल कार्य करता है
constevalकीवर्ड[30] - हस्ताक्षरित पूर्णांक अब दो के पूरक का उपयोग करके दर्शाए जाने के लिए परिभाषित किए गए हैं (हस्ताक्षरित पूर्णांक अतिप्रवाह अपरिभाषित व्यवहार रहता है)[31]
- एक संशोधित स्मृति मॉडल[32]
- संरचित बाइंडिंग में विभिन्न सुधार (लैम्ब्डा कैप्चर के साथ सहभागिता,
staticऔरthread_localभंडारण अवधि)[33][34] - coroutine[35]
usingदायरे मेंenums[36]*constinitकीवर्ड[37]
पुस्तकालय
- पर्वतमाला (एक श्रेणी प्रस्ताव)[38]
std::make_sharedऔरstd::allocate_sharedसरणियों के लिए[39]- एटॉमिक स्मार्ट पॉइंटर्स (जैसे
std::atomic<shared_ptr<T>>औरstd::atomic<weak_ptr<T>>)[40] std::to_addressएक सूचक को कच्चे सूचक में बदलने के लिए[41]- कैलेंडर और समय-क्षेत्र के अतिरिक्त
<chrono>[42] std::span, एक सन्निहित सरणी के लिए एक दृश्य प्रदान करता है (के अनुरूपstd::string_viewलेकिनspanसंदर्भित अनुक्रम को बदल सकते हैं)[43]std::eraseऔरstd::erase_if, अधिकांश मानक कंटेनरों के लिए तत्व विलोपन को सरल बनाना[44]<version>हैडर[45]std::bit_cast<>से कम शब्दाडंबर के साथ वस्तु निरूपण के प्रकार कास्टिंग के लिएmemcpy()और कंपाइलर इंटर्नल्स का फायदा उठाने की अधिक क्षमता[46]- फीचर टेस्ट मैक्रोज़[47]
- विभिन्न कॉन्स्टेक्स लाइब्रेरी बिट्स[48]
- डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन[49]
containsसहयोगी कंटेनरों के लिए -विधि[50]- बिट ऑपरेशंस, जैसे लीडिंग/ट्रेलिंग ज़ीरो/वन काउंट,[51]और लॉग 2 ऑपरेशंस[52][53][54]
std::bind_front[55]
नए और परिवर्तित कीवर्ड्स
कई नए कीवर्ड जोड़े गए (और नया स्पेसशिप ऑपरेटर, operator <=>), जैसे कि concept, constinit,[37] consteval, co_await, co_return, co_yield, requires (प्लस के लिए परिवर्तित अर्थ export), और char8_t (UTF-8 समर्थन के लिए)।[56] और explicit सी ++ 20 के बाद से अभिव्यक्ति ले सकता है।[57] के अधिकांश उपयोग volatile कीवर्ड बहिष्कृत कर दिया गया है।[58]
खोजशब्दों के अलावा, नए सहित विशेष अर्थ वाले पहचानकर्ता भी हैं import और module.
सी ++ 20 में नई विशेषताएँ:
[[likely]], [[unlikely]], और [[no_unique_address]][59]
हटा दिया गया और हटा दिया गया
हटाई गई विशेषताएं:[60]
- सी (प्रोग्रामिंग भाषा)-व्युत्पन्न हेडर
<ccomplex>,<ciso646>,<cstdalign>,<cstdbool>और<ctgmath>हटा दिए गए, क्योंकि वे C++ में कोई उद्देश्य पूरा नहीं करते। (इसी<*.h>सी के साथ अनुकूलता के लिए हेडर बने रहते हैं।) - का उपयोग
throw()एक अपवाद विनिर्देश के रूप में हटा दिया गया था। - कुछ पूर्व में पदावनत पुस्तकालय सुविधाओं को हटा दिया गया था, जिनमें शामिल हैं
std::uncaught_exception,std::raw_storage_iterator,std::is_literal_type,std::is_literal_type_v,std::result_ofऔरstd::result_of_t.
बहिष्कृत विशेषताएं:
- सबस्क्रिप्ट एक्सप्रेशन में कॉमा ऑपरेटर का उपयोग बहिष्कृत कर दिया गया है[61]* (के सबसे)
volatileबहिष्कृत किया गया है[58]
तकनीकी विशिष्टताओं के रूप में प्रकाशित
== बाद के मानक == के लिए स्थगित
- ठेके – एक नए प्रस्ताव पर काम करने के लिए एक नया अध्ययन समूह (SG21) बनाया गया है[66]
- प्रतिबिंब[67][68]
- मेटाक्लास[69]
- निष्पादक[70]
- नेटवर्किंग एक्सटेंशन,[71][72] async, बुनियादी I/O सेवाओं, टाइमर, बफ़र्स और बफर-ओरिएंटेड स्ट्रीम, सॉकेट्स और इंटरनेट प्रोटोकॉल (निष्पादकों द्वारा अवरुद्ध) सहित
- गुण[73]
- विस्तारित वायदा[74]
संकलक समर्थन
पूर्ण समर्थन[75]
- Microsoft Visual Studio#2019 इसके माध्यम से सभी C++20 सुविधाओं का समर्थन करता है
/std:c++latestविकल्प, संस्करण 16.10.0 के अनुसार।[76] एक विकल्प/std:c++20C++20 मोड को सक्षम करने के लिए संस्करण 16.11.0 में जोड़ा गया है।[77][78] प्रोजेक्ट गुण → कॉन्फ़िगरेशन गुण → सी/सी ++ → भाषा → सी ++ भाषा मानक।
माइक्रोसॉफ्ट का कंपाइलर सिर्फ विंडोज, लिनक्स (और जैसे एंड्रॉइड और आईओएस) का समर्थन नहीं करता है, जबकि इसके लिए लिनक्स डेवलपमेंट एक्सटेंशन के लिए विज़ुअल सी ++ की आवश्यकता होती है।[79] आंशिक
- बजना में आंशिक C++20 समर्थन है जिसे विकल्प के साथ सक्षम किया जा सकता है
-std=c++20(संस्करण 10 और बाद में) या-std=c++2a(संस्करण 9 और पूर्व)।[80] - एडिसन डिजाइन समूह ने संस्करण 5.0 में C++20 सुविधाओं को लागू करना शुरू किया और संस्करण 6.1 के रूप में अधिकांश C++20 कोर भाषा सुविधाओं का समर्थन करता है।[81]
- GNU संकलक संग्रह ने 2017 में आंशिक, प्रयोगात्मक C++20 समर्थन जोड़ा[82] विकल्प के माध्यम से संस्करण 8 में
-std=c++2a. क्लैंग की तरह, जीसीसी ने इस विकल्प को-std=c++20संस्करण 10 में। इसमें प्रायोगिक C++20 समर्थन के अलावा GNU एक्सटेंशन को सक्षम करने का विकल्प भी है,-std=gnu++20.[83]
इतिहास
जुलाई 2017 (टोरंटो) में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[84]
- अवधारणाएँ (C++) (जिसने इसे मानक में बनाया वह एक कट-डाउन संस्करण है; इसे कॉन्सेप्ट लाइट के रूप में भी वर्णित किया गया है[85])
- नामित प्रारंभकर्ता
[=, this]लैम्ब्डा कैप्चर के रूप में- लैम्ब्डा पर टेम्पलेट पैरामीटर सूची
std::make_sharedऔरstd::allocate_sharedसरणियों के लिए
नवंबर 2017 (अल्बुकर्क) में गिरावट की बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[86][87]
- स्पेसशिप ऑपरेटर का उपयोग करके तीन-तरफ़ा तुलना,
operator <=> - एक श्रेणी-आधारित के भीतर एक अतिरिक्त चर का आरंभीकरण
forकथन - बिना मूल्यांकित संदर्भों में लैम्ब्डा
- डिफ़ॉल्ट रचनात्मक और असाइन करने योग्य स्टेटलेस लैम्ब्डा
- लैम्ब्डा इनिट-कैप्चर में पैक विस्तार की अनुमति दें
- स्ट्रिंग शाब्दिक टेम्पलेट पैरामीटर के रूप में
- एटॉमिक स्मार्ट पॉइंटर्स (जैसे
std::atomic<shared_ptr<T>>औरstd::atomic<weak_ptr<T>>) std::to_addressएक सूचक को कच्चे सूचक में बदलने के लिए
मार्च 2018 (जैक्सनविले) में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[88]
- की आवश्यकता को दूर करना
typenameकुछ निश्चित परिस्थितियों में - नए मानक गुण
[[no_unique_address]],[[likely]]और[[unlikely]] - कैलेंडर और समय-क्षेत्र के अतिरिक्त
<chrono> std::span, एक सन्निहित सरणी के लिए एक दृश्य प्रदान करता है (के अनुरूपstd::string_viewलेकिनspanसंदर्भित अनुक्रम को बदल सकते हैं)<version>हैडर
जून 2018 (रैपर्सविल) में ग्रीष्मकालीन बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[89]
अनुबंध(C++20#बाद के मानक के लिए स्थगित)[90]- फीचर टेस्ट मैक्रोज़
- वस्तु अभ्यावेदन की बिट-कास्टिंग, से कम वाचालता के साथ
memcpy()और कंपाइलर इंटर्नल्स का फायदा उठाने की अधिक क्षमता - सशर्त
explicit, स्पष्ट संशोधक को बूलियन अभिव्यक्ति पर आकस्मिक होने की अनुमति देता है - constexpr आभासी कार्य करता है
नवंबर 2018 (सैन डिएगो) में गिरावट की बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[91]
- पर्वतमाला (एक श्रेणी प्रस्ताव)
- अवधारणा संक्षिप्त वाक्य रचना
constexprunion,tryऔरcatch,dynamic_cast,typeidऔरstd::pointer_traits.- विभिन्न
constexprलाइब्रेरी बिट्स - नए का उपयोग कर तत्काल कार्य करता है
constevalकीवर्ड - हस्ताक्षरित पूर्णांक अब दो के पूरक का उपयोग करके दर्शाए जाने के लिए परिभाषित किए गए हैं (हस्ताक्षरित पूर्णांक अतिप्रवाह अपरिभाषित व्यवहार रहता है)
अनुबंध सुविधा का परिशोधन (अनुबंध शर्तों में अभिगम नियंत्रण)[92] (सी ++ 20 की सूची देखें # बाद के मानक के लिए स्थगित)- एक संशोधित स्मृति मॉडल
- डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन
फरवरी 2019 (कोना) में शीतकालीन बैठक में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[93][94][95]
- कोरआउटिन
- मॉड्यूलर प्रोग्रामिंग
- संरचित बाइंडिंग में विभिन्न सुधार (लैम्ब्डा कैप्चर के साथ सहभागिता,
staticऔरthread_localभंडारण अवधि)
जुलाई 2019 (कोलोन) में ग्रीष्मकालीन बैठक में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:[96][97][98][99]
- अनुबंध हटा दिए गए थे (सी ++ 20 की सूची देखें # बाद के मानक के लिए स्थगित)[100]
- सबस्क्रिप्ट एक्सप्रेशंस में कॉमा ऑपरेटर का उपयोग बहिष्कृत कर दिया गया है[61]
constexprअतिरिक्त (तुच्छ डिफ़ॉल्ट प्रारंभिकरण,[101] अमूल्यांकित इनलाइन-असेंबली[102])- दायरे का उपयोग करना
enums[36] - स्पेसशिप ऑपरेटर में विभिन्न परिवर्तन[103][104]
- डॉ: मॉड्यूल में मामूली बदलाव[105]
constinitकीवर्ड- अवधारणाओं में परिवर्तन (निकालना
-> Typeवापसी-प्रकार-आवश्यकताएं[106]) - (के सबसे)
volatileबहिष्कृत किया गया है[58] - डॉ:
[[nodiscard]]निर्माणकर्ताओं पर प्रभाव[107] - नई मानक पुस्तकालय अवधारणाएँ PascalCase का उपयोग नहीं करेंगी (बल्कि
standard_case, बाकी मानक पुस्तकालय के रूप में)[108] - पाठ स्वरूपण[109][110] (
chronoएकीकरण,[111] कोने का मामला ठीक करता है[112]) - बिट ऑपरेशंस[51]
constexpr INVOKE[113]- गणित स्थिरांक[114]
- परमाणुओं के लिए संगति परिवर्धन (
std::atomic_ref<T>,[115]std::atomic<std::shared_ptr<T>>[116]) - जोड़ें
<=>मानक पुस्तकालय के लिए ऑपरेटर[117] - मानक पुस्तकालय के लिए हेडर इकाइयां[118]
- तुल्यकालन सुविधाएं[119] (से विलय: कुशल परमाणु प्रतीक्षा और सेमाफोर,[120] कुंडी और अवरोध,[121] में सुधार
atomic_flag,[122] छोटे CPUs पर C++ को लागू करने योग्य न बनाएं[123]) std::source_location[124]constexprकंटेनर (std::string,[125]std::vector[126])std::stop_tokenऔर धागे में शामिल होना (std::jthread)[127]
नवंबर 2019 (बेलफास्ट) में फॉल मीटिंग में एनबी टिप्पणी प्रस्ताव के दौरान लागू किए गए परिवर्तनों में शामिल हैं:[128][129][130][131]
- गैर-प्रकार टेम्पलेट पैरामीटर्स (एनटीटीपी) में वर्ग प्रकार: उपयोगकर्ता परिभाषित नहीं होने का प्रतिबंध
operator==अनुमति को हटा दिया गया है क्योंकि टेम्पलेट तर्क समानता का अर्थ तलाक दे दिया गया हैoperator==.[132] यह वर्ग-प्रकार NTTP में सरणी सदस्यों के लिए भी अनुमति देता है। - फ़्लोटिंग-पॉइंट प्रकार,[133] पॉइंटर्स और संदर्भ और यूनियन और यूनियन-जैसी कक्षाएं (गुमनाम यूनियनों वाले वर्ग प्रकार) को अब एनटीटीपी के रूप में अनुमति दी गई है।
- फ़ंक्शन पहचान में अब अनुगामी आवश्यकताएं-खंड (P1971) भी शामिल हैं
- प्रतिबंधित गैर-टेम्प्लेट फ़ंक्शन हटा दिए गए हैं
<compare>अब फ्रीस्टैंडिंग कार्यान्वयन में उपलब्ध है[134]std::spans typedef से बदल दिया गया थाindex_typeकोsize_typeबाकी मानक पुस्तकालय के अनुरूप होना[135]- कोलोन बैठक के परिणामस्वरूप अवधारणाओं के नामकरण का पालन करने के लिए संकल्पना लक्षणों का नाम बदल दिया गया है
- श्रेणियों में कई सुधार और परिवर्धन (P1456R1: मूव-ओनली व्यूज,[136] P1391R4: के लिए रेंज कंस्ट्रक्टर
std::string_view(पात्रों की इटरेटर-जोड़ी से निर्माता),[137] P1394R4: के लिए रेंज कंस्ट्रक्टरstd::span<ref>,[138] P1870R1: अग्रेषण-श्रेणी<T> बहुत सूक्ष्म है[139]) - के लिए आरंभीकरण
std::atomic<T>इसे डिफ़ॉल्ट और सूची आरंभीकरण के साथ काम करने के लिए बदल दिया गया है,[140]std::latchऔरstd::barrierअब नए सदस्य फ़ंक्शन के माध्यम से कार्यान्वयन द्वारा समर्थित थ्रेड्स की अधिकतम संख्या की रिपोर्ट कर सकते हैंmax() std::weak_equalityऔरstd::strong_equalityउपयोग में न होने के कारण इन्हें हटा दिया गया है- में एल्गोरिदम
<numeric>बनाया गया हैconstexpr - C++20 के नए या बदले हुए फीचर के लिए मिसिंग फीचर-टेस्ट मैक्रोज़ जोड़े गए हैं[141]
संदर्भ
- ↑ "The Standard". isocpp.org. Archived from the original on 19 September 2020. Retrieved 7 September 2020.
- ↑ Sutter, Herb (2019-10-01). "P1000R3: C++ IS schedule" (PDF). Archived (PDF) from the original on 2019-11-14. Retrieved 2020-02-13.
- ↑ Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information" (PDF). Archived (PDF) from the original on 2019-12-29. Retrieved 2020-02-13.
- ↑ "Current Status". isocpp.org. Archived from the original on 8 September 2020. Retrieved 7 September 2020.
- ↑ "C++20 Approved -- Herb Sutter". isocpp.org. Archived from the original on 11 September 2020. Retrieved 8 September 2020.
- ↑ "ISO/IEC 14882:2020". Archived from the original on 2020-12-16. Retrieved 2020-12-16.
- ↑ "Why does the C++ standard ship every three years?". 13 July 2019. Archived from the original on 13 July 2019. Retrieved 19 July 2019.
- ↑ "P0592R0: To boldly suggest an overall plan for C++20". Archived from the original on 2017-03-08. Retrieved 2017-05-06.
- ↑ "P0606R0: Concepts Are Ready" (PDF). Archived (PDF) from the original on 2017-03-28. Retrieved 2017-05-06.
- ↑ "P1141R1 - Yet another approach for constrained declarations". Archived from the original on 2018-11-11. Retrieved 2018-11-11.
- ↑ "N4720: Working Draft, Extensions to C++ for Modules" (PDF). Archived (PDF) from the original on 2019-04-30. Retrieved 2019-04-30.
- ↑ Tim Shen; Richard Smith. "Designated Initialization Wording". Archived from the original on 2017-10-15. Retrieved 2017-07-16.
- ↑ Thomas Köppe. "Allow lambda capture [=, this]". Archived from the original on 2019-02-09. Retrieved 2017-07-16.
- ↑ "Familiar template syntax for generic lambdas". Archived from the original on 2018-11-21. Retrieved 2017-07-16.
- ↑ "Range-based for statements with initializer". Archived from the original on 2017-04-06. Retrieved 2019-10-30.
- ↑ 16.0 16.1 16.2 "Trip Report: C++ Standards Meeting in Albuquerque, November 2017". There's Waldo! (in English). 2017-11-20. Archived from the original on 2017-12-11. Retrieved 2017-12-11.
- ↑ "Wording for lambdas in unevaluated contexts" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2017-12-11.
- ↑ "Default constructible and assignable stateless lambdas" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2017-12-11.
- ↑ "Pack expansion in lambda init-capture". www.open-std.org. Archived from the original on 2020-02-14. Retrieved 2017-12-11.
- ↑ "Class Types in Non-Type Template Parameters" (PDF). www.open-std.org. 2018-06-06. Archived (PDF) from the original on 2022-02-05. Retrieved 2022-02-18.
- ↑ Nina Ranns; Daveed Vandevoorde. "Down with typename!". Archived from the original on 2018-04-22. Retrieved 2019-05-18.
- ↑ "Language support for empty objects". Archived from the original on 2018-04-17. Retrieved 2019-08-04.
- ↑ "Proposed wording for likely and unlikely attributes (Revision 5)". Archived from the original on 2018-05-13. Retrieved 2019-05-18.
- ↑ "explicit(bool)". www.open-std.org. Archived from the original on 2018-07-20. Retrieved 2018-11-13.
- ↑ "Allowing Virtual Function Calls in Constant Expressions". www.open-std.org. Archived from the original on 2018-06-11. Retrieved 2019-03-11.
- ↑ "P1330R0 - Changing the active member of a union inside constexpr". Archived from the original on 2019-07-26. Retrieved 2019-07-26.
- ↑ "P1002R0 - Try-catch blocks in constexpr functions" (PDF)