सी ++ 20

C++20, C++ प्रोग्रामिंग भाषा के लिए मानकीकरण के लिए अंतर्राष्ट्रीय संगठन/अंतर्राष्ट्रीय इंटरनेशनल इलेक्ट्रोटेक्नीकल कमीशन मानक का एक संस्करण है। C++20 ने C++ मानक के पूर्व संस्करण को बदल दिया, जिसे C++17 कहा जाता है। मानक को तकनीकी रूप से अंतिम रूप दिया गया था फरवरी 2020 में प्राहा में बैठक में ISO/IEC JTC 1/SC 22 द्वारा, 4 सितंबर 2020 को स्वीकृत, और दिसंबर 2020 में प्रकाशित हुआ।

सुविधाएँ
C++20 C++14 या C++17 की तुलना में अधिक नई प्रमुख विशेषताएं जोड़ता है। C++20 में स्वीकार किए गए परिवर्तनों में शामिल हैं:

भाषा

 * अवधारणाएं (सी ++), संक्षिप्त वाक्य रचना के साथ
 * मॉड्यूलर प्रोग्रामिंग
 * नामित प्रारंभकर्ता (C99 फीचर और सामान्य GNU जीएनयू संकलक संग्रह|g++ एक्सटेंशन पर आधारित)
 * लैम्ब्डा कैप्चर के रूप में
 * लैम्ब्डा में टेम्पलेट पैरामीटर सूची
 * स्पेसशिप ऑपरेटर का उपयोग करके तीन-तरफ़ा तुलना,
 * एक श्रेणी-आधारित के भीतर एक अतिरिक्त चर का आरंभीकरण  कथन
 * बिना मूल्यांकित संदर्भों में लैम्ब्डा
 * डिफ़ॉल्ट रचनात्मक और असाइन करने योग्य स्टेटलेस लैम्ब्डा
 * लैम्ब्डा इनिट-कैप्चर में पैक विस्तार की अनुमति दें
 * गैर-प्रकार के टेम्पलेट पैरामीटर में वर्ग प्रकार, स्ट्रिंग अक्षर को टेम्पलेट पैरामीटर के रूप में भी अनुमति देता है
 * की आवश्यकता को दूर करना  कुछ निश्चित परिस्थितियों में
 * नए मानक गुण,   और
 * सशर्त, अनुमति देता है   एक बूलियन अभिव्यक्ति पर आकस्मिक होने के लिए संशोधक
 * विस्तारित : आभासी कार्य, ,   और  ,   और  ,
 * नए का उपयोग कर तत्काल कार्य करता है  कीवर्ड
 * हस्ताक्षरित पूर्णांक अब दो के पूरक का उपयोग करके दर्शाए जाने के लिए परिभाषित किए गए हैं (हस्ताक्षरित पूर्णांक अतिप्रवाह अपरिभाषित व्यवहार रहता है)
 * एक संशोधित स्मृति मॉडल
 * संरचित बाइंडिंग में विभिन्न सुधार (लैम्ब्डा कैप्चर के साथ सहभागिता,  और   भंडारण अवधि)
 * coroutine
 * दायरे में s *   कीवर्ड

पुस्तकालय

 * पर्वतमाला (एक श्रेणी प्रस्ताव)
 * और  सरणियों के लिए
 * एटॉमिक स्मार्ट पॉइंटर्स (जैसे  और  )
 * एक सूचक को कच्चे सूचक में बदलने के लिए
 * कैलेंडर और समय-क्षेत्र के अतिरिक्त
 * , एक सन्निहित सरणी के लिए एक दृश्य प्रदान करता है (के अनुरूप  लेकिन   संदर्भित अनुक्रम को बदल सकते हैं)
 * और, अधिकांश मानक कंटेनरों के लिए तत्व विलोपन को सरल बनाना
 * हैडर
 * से कम शब्दाडंबर के साथ वस्तु निरूपण के प्रकार कास्टिंग के लिए  और कंपाइलर इंटर्नल्स का फायदा उठाने की अधिक क्षमता
 * फीचर टेस्ट मैक्रोज़
 * विभिन्न कॉन्स्टेक्स लाइब्रेरी बिट्स
 * डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन
 * सहयोगी कंटेनरों के लिए -विधि
 * बिट ऑपरेशंस, जैसे लीडिंग/ट्रेलिंग ज़ीरो/वन काउंट, और लॉग 2 ऑपरेशंस

नए और परिवर्तित कीवर्ड्स
कई नए कीवर्ड जोड़े गए (और नया स्पेसशिप ऑपरेटर, ), जैसे कि ,  ,  ,  ,  ,  ,   (प्लस के लिए परिवर्तित अर्थ  ), और   (UTF-8 समर्थन के लिए)। और   सी ++ 20 के बाद से अभिव्यक्ति ले सकता है। के अधिकांश उपयोग   कीवर्ड बहिष्कृत कर दिया गया है।

खोजशब्दों के अलावा, नए सहित विशेष अर्थ वाले पहचानकर्ता भी हैं  और. सी ++ 20 में नई विशेषताएँ: ,,  और

हटा दिया गया और हटा दिया गया
हटाई गई विशेषताएं:
 * सी (प्रोग्रामिंग भाषा)-व्युत्पन्न हेडर,  ,  ,   और   हटा दिए गए, क्योंकि वे C++ में कोई उद्देश्य पूरा नहीं करते। (इसी   सी के साथ अनुकूलता के लिए हेडर बने रहते हैं।)
 * का उपयोग  एक अपवाद विनिर्देश के रूप में हटा दिया गया था।
 * कुछ पूर्व में पदावनत पुस्तकालय सुविधाओं को हटा दिया गया था, जिनमें शामिल हैं,  ,  ,  ,   और.

बहिष्कृत विशेषताएं:


 * सबस्क्रिप्ट एक्सप्रेशन में कॉमा ऑपरेटर का उपयोग बहिष्कृत कर दिया गया है * (के सबसे)  बहिष्कृत किया गया है

तकनीकी विशिष्टताओं के रूप में प्रकाशित

 * समानता टीएस v2 (टास्क ब्लॉक सहित )
 * प्रतिबिंब टीएस v1
 * नेटवर्किंग टीएस v1

बाद के मानक
के लिए स्थगित


 * ठेके – एक नए प्रस्ताव पर काम करने के लिए एक नया अध्ययन समूह (SG21) बनाया गया है
 * प्रतिबिंब
 * मेटाक्लास
 * निष्पादक
 * नेटवर्किंग एक्सटेंशन, async, बुनियादी I/O सेवाओं, टाइमर, बफ़र्स और बफर-ओरिएंटेड स्ट्रीम, सॉकेट्स और इंटरनेट प्रोटोकॉल (निष्पादकों द्वारा अवरुद्ध) सहित
 * गुण
 * विस्तारित वायदा

संकलक समर्थन
पूर्ण समर्थन
 * Microsoft Visual Studio#2019 इसके माध्यम से सभी C++20 सुविधाओं का समर्थन करता है  विकल्प, संस्करण 16.10.0 के अनुसार। एक विकल्प   C++20 मोड को सक्षम करने के लिए संस्करण 16.11.0 में जोड़ा गया है।  प्रोजेक्ट गुण → कॉन्फ़िगरेशन गुण → सी/सी ++ → भाषा → सी ++ भाषा मानक।

माइक्रोसॉफ्ट का कंपाइलर सिर्फ विंडोज, लिनक्स (और जैसे एंड्रॉइड और आईओएस) का समर्थन नहीं करता है, जबकि इसके लिए लिनक्स डेवलपमेंट एक्सटेंशन के लिए विज़ुअल सी ++ की आवश्यकता होती है। आंशिक
 * बजना में आंशिक C++20 समर्थन है जिसे विकल्प के साथ सक्षम किया जा सकता है  (संस्करण 10 और बाद में) या   (संस्करण 9 और पूर्व)।
 * एडिसन डिजाइन समूह ने संस्करण 5.0 में C++20 सुविधाओं को लागू करना शुरू किया और संस्करण 6.1 के रूप में अधिकांश C++20 कोर भाषा सुविधाओं का समर्थन करता है।
 * GNU संकलक संग्रह ने 2017 में आंशिक, प्रयोगात्मक C++20 समर्थन जोड़ा विकल्प के माध्यम से संस्करण 8 में . क्लैंग की तरह, जीसीसी ने इस विकल्प को   संस्करण 10 में। इसमें प्रायोगिक C++20 समर्थन के अलावा GNU एक्सटेंशन को सक्षम करने का विकल्प भी है,.

इतिहास
जुलाई 2017 (टोरंटो) में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * अवधारणाएँ (C++) (जिसने इसे मानक में बनाया वह एक कट-डाउन संस्करण है; इसे कॉन्सेप्ट लाइट के रूप में भी वर्णित किया गया है )
 * नामित प्रारंभकर्ता
 * लैम्ब्डा कैप्चर के रूप में
 * लैम्ब्डा पर टेम्पलेट पैरामीटर सूची
 * और  सरणियों के लिए

नवंबर 2017 (अल्बुकर्क) में गिरावट की बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * स्पेसशिप ऑपरेटर का उपयोग करके तीन-तरफ़ा तुलना,
 * एक श्रेणी-आधारित के भीतर एक अतिरिक्त चर का आरंभीकरण  कथन
 * बिना मूल्यांकित संदर्भों में लैम्ब्डा
 * डिफ़ॉल्ट रचनात्मक और असाइन करने योग्य स्टेटलेस लैम्ब्डा
 * लैम्ब्डा इनिट-कैप्चर में पैक विस्तार की अनुमति दें
 * स्ट्रिंग शाब्दिक टेम्पलेट पैरामीटर के रूप में
 * एटॉमिक स्मार्ट पॉइंटर्स (जैसे  और  )
 * एक सूचक को कच्चे सूचक में बदलने के लिए

मार्च 2018 (जैक्सनविले) में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * की आवश्यकता को दूर करना  कुछ निश्चित परिस्थितियों में
 * नए मानक गुण,   और
 * कैलेंडर और समय-क्षेत्र के अतिरिक्त
 * , एक सन्निहित सरणी के लिए एक दृश्य प्रदान करता है (के अनुरूप  लेकिन   संदर्भित अनुक्रम को बदल सकते हैं)
 * हैडर

जून 2018 (रैपर्सविल) में ग्रीष्मकालीन बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * अनुबंध (C++20#बाद के मानक के लिए स्थगित)
 * फीचर टेस्ट मैक्रोज़
 * वस्तु अभ्यावेदन की बिट-कास्टिंग, से कम वाचालता के साथ  और कंपाइलर इंटर्नल्स का फायदा उठाने की अधिक क्षमता
 * सशर्त, स्पष्ट संशोधक को बूलियन अभिव्यक्ति पर आकस्मिक होने की अनुमति देता है
 * constexpr आभासी कार्य करता है

नवंबर 2018 (सैन डिएगो) में गिरावट की बैठक में सी ++ 20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * पर्वतमाला (एक श्रेणी प्रस्ताव)
 * अवधारणा संक्षिप्त वाक्य रचना
 * ,  और ,  ,   और.
 * विभिन्न  लाइब्रेरी बिट्स
 * नए का उपयोग कर तत्काल कार्य करता है  कीवर्ड
 * हस्ताक्षरित पूर्णांक अब दो के पूरक का उपयोग करके दर्शाए जाने के लिए परिभाषित किए गए हैं (हस्ताक्षरित पूर्णांक अतिप्रवाह अपरिभाषित व्यवहार रहता है)
 * अनुबंध सुविधा का परिशोधन (अनुबंध शर्तों में अभिगम नियंत्रण) (सी ++ 20 की सूची देखें # बाद के मानक के लिए स्थगित)
 * एक संशोधित स्मृति मॉडल
 * डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन

फरवरी 2019 (कोना) में शीतकालीन बैठक में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं:
 * कोरआउटिन
 * मॉड्यूलर प्रोग्रामिंग
 * संरचित बाइंडिंग में विभिन्न सुधार (लैम्ब्डा कैप्चर के साथ सहभागिता,  और   भंडारण अवधि)

जुलाई 2019 (कोलोन) में ग्रीष्मकालीन बैठक में C++20 वर्किंग ड्राफ्ट में लागू किए गए परिवर्तनों में शामिल हैं: नवंबर 2019 (बेलफास्ट) में फॉल मीटिंग में एनबी टिप्पणी प्रस्ताव के दौरान लागू किए गए परिवर्तनों में शामिल हैं:
 * अनुबंध हटा दिए गए थे (सी ++ 20 की सूची देखें # बाद के मानक के लिए स्थगित)
 * सबस्क्रिप्ट एक्सप्रेशंस में कॉमा ऑपरेटर का उपयोग बहिष्कृत कर दिया गया है
 * अतिरिक्त (तुच्छ डिफ़ॉल्ट प्रारंभिकरण, अमूल्यांकित इनलाइन-असेंबली )
 * दायरे का उपयोग करना s
 * स्पेसशिप ऑपरेटर में विभिन्न परिवर्तन
 * डॉ: मॉड्यूल में मामूली बदलाव
 * कीवर्ड
 * अवधारणाओं में परिवर्तन (निकालना  वापसी-प्रकार-आवश्यकताएं )
 * (के सबसे)  बहिष्कृत किया गया है
 * डॉ:  निर्माणकर्ताओं पर प्रभाव
 * नई मानक पुस्तकालय अवधारणाएँ PascalCase का उपयोग नहीं करेंगी (बल्कि, बाकी मानक पुस्तकालय के रूप में)
 * पाठ स्वरूपण (  एकीकरण, कोने का मामला ठीक करता है )
 * बिट ऑपरेशंस
 * गणित स्थिरांक
 * परमाणुओं के लिए संगति परिवर्धन
 * जोड़ें  मानक पुस्तकालय के लिए ऑपरेटर
 * मानक पुस्तकालय के लिए हेडर इकाइयां
 * तुल्यकालन सुविधाएं (से विलय: कुशल परमाणु प्रतीक्षा और सेमाफोर, कुंडी और अवरोध, में सुधार, छोटे CPUs पर C++ को लागू करने योग्य न बनाएं )
 * कंटेनर
 * और धागे में शामिल होना
 * कंटेनर
 * और धागे में शामिल होना
 * गैर-प्रकार टेम्पलेट पैरामीटर्स (एनटीटीपी) में वर्ग प्रकार: उपयोगकर्ता परिभाषित नहीं होने का प्रतिबंध  अनुमति को हटा दिया गया है क्योंकि टेम्पलेट तर्क समानता का अर्थ तलाक दे दिया गया है  . यह वर्ग-प्रकार NTTP में सरणी सदस्यों के लिए भी अनुमति देता है।
 * फ़्लोटिंग-पॉइंट प्रकार, पॉइंटर्स और संदर्भ और यूनियन और यूनियन-जैसी कक्षाएं (गुमनाम यूनियनों वाले वर्ग प्रकार) को अब एनटीटीपी के रूप में अनुमति दी गई है।
 * फ़ंक्शन पहचान में अब अनुगामी आवश्यकताएं-खंड (P1971) भी शामिल हैं
 * प्रतिबंधित गैर-टेम्प्लेट फ़ंक्शन हटा दिए गए हैं
 * अब फ्रीस्टैंडिंग कार्यान्वयन में उपलब्ध है
 * s typedef से बदल दिया गया था  को   बाकी मानक पुस्तकालय के अनुरूप होना
 * कोलोन बैठक के परिणामस्वरूप अवधारणाओं के नामकरण का पालन करने के लिए संकल्पना लक्षणों का नाम बदल दिया गया है
 * श्रेणियों में कई सुधार और परिवर्धन (P1456R1: मूव-ओनली व्यूज, P1391R4: के लिए रेंज कंस्ट्रक्टर  (पात्रों की इटरेटर-जोड़ी से निर्माता), P1394R4: के लिए रेंज कंस्ट्रक्टर , P1870R1: अग्रेषण-श्रेणी बहुत सूक्ष्म है )
 * के लिए आरंभीकरण  इसे डिफ़ॉल्ट और सूची आरंभीकरण के साथ काम करने के लिए बदल दिया गया है,   और   अब नए सदस्य फ़ंक्शन के माध्यम से कार्यान्वयन द्वारा समर्थित थ्रेड्स की अधिकतम संख्या की रिपोर्ट कर सकते हैं
 * और  उपयोग में न होने के कारण इन्हें हटा दिया गया है
 * में एल्गोरिदम  बनाया गया है
 * C++20 के नए या बदले हुए फीचर के लिए मिसिंग फीचर-टेस्ट मैक्रोज़ जोड़े गए हैं

बाहरी संबंध

 * Link to purchase ISO/IEC 14882:2020 from the ISO online store.
 * N4860, the final draft version of the standard.
 * JTC1/SC22/WG21 – the ISO/IEC C++ Standard Working Group (a.k.a. the C++ Standards Committee)
 * Ranges (range-v3) GitHub repository, by Eric Niebler