सी ++ 20: Difference between revisions
No edit summary |
No edit summary |
||
| Line 48: | Line 48: | ||
* विभिन्न कॉन्स्टेक्स लाइब्रेरी बिट्स<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html|title=P1032R1 - Misc constexpr bits|access-date=2018-11-11|archive-date=2018-10-26|archive-url=https://web.archive.org/web/20181026124238/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html|url-status=live}}</ref> | * विभिन्न कॉन्स्टेक्स लाइब्रेरी बिट्स<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html|title=P1032R1 - Misc constexpr bits|access-date=2018-11-11|archive-date=2018-10-26|archive-url=https://web.archive.org/web/20181026124238/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html|url-status=live}}</ref> | ||
* डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html|title=Smart pointer creation with default initialization|access-date=2020-02-12|archive-date=2019-01-26|archive-url=https://web.archive.org/web/20190126111714/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html|url-status=live}}</ref> | * डिफॉल्ट इनिशियलाइज़ेशन के साथ स्मार्ट पॉइंटर क्रिएशन<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html|title=Smart pointer creation with default initialization|access-date=2020-02-12|archive-date=2019-01-26|archive-url=https://web.archive.org/web/20190126111714/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html|url-status=live}}</ref> | ||
* <code>contains</code>सहयोगी कंटेनरों के लिए | * <code>contains</code>सहयोगी कंटेनरों के लिए विधि<ref>{{Cite web|title=P0458R2: Checking for Existence of an Element in Associative Containers|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html|author1=Mikhail Maltsev|access-date=2022-01-02|archive-date=2022-01-16|archive-url=https://web.archive.org/web/20220116211430/https://www9.open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0458r2.html|url-status=live}}</ref> | ||
* बिट ऑपरेशंस | * बिट ऑपरेशंस जैसे लीडिंग/ट्रेलिंग ज़ीरो/वन काउंट<ref name="P0553R4: Bit operations"/>और लॉग 2 ऑपरेशंस<ref>{{cite web|url=https://wg21.link/p0556r3|title=P0556R3: Integral power-of-2 operations|date=2018-06-06|website=www.open-std.org|access-date=2020-08-08|archive-date=2019-06-26|archive-url=https://web.archive.org/web/20190626184254/https://wg21.link/p0556r3|url-status=live}}</ref><ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1355r2.html|title=P1355R2 Exposing a narrow contract for ceil2|date=2019-06-11|website=www.open-std.org|access-date=2020-08-08|archive-date=2019-08-05|archive-url=https://web.archive.org/web/20190805104347/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1355r2.html|url-status=live}}</ref><ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf|title=On the names of low-level bit manipulation functions|date=2020-02-11|website=www.open-std.org|access-date=2020-08-08|archive-date=2020-03-24|archive-url=https://web.archive.org/web/20200324173059/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf|url-status=live}}</ref> | ||
* <code>std::bind_front</code><ref>{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0356r3.html|title=Simplified partial function application|author=Tomasz Kamiński|date=2017-11-09|access-date=2020-11-08|archive-date=2020-09-28|archive-url=https://web.archive.org/web/20200928182706/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0356r3.html|url-status=live}}</ref> | * <code>std::bind_front</code><ref>{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0356r3.html|title=Simplified partial function application|author=Tomasz Kamiński|date=2017-11-09|access-date=2020-11-08|archive-date=2020-09-28|archive-url=https://web.archive.org/web/20200928182706/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0356r3.html|url-status=live}}</ref> | ||
| Line 55: | Line 55: | ||
=== नए और परिवर्तित कीवर्ड्स === | === नए और परिवर्तित कीवर्ड्स === | ||
कई नए कीवर्ड जोड़े गए | कई नए कीवर्ड जोड़े गए और नया स्पेसशिप ऑपरेटर <code>operator <=></code>) जैसे कि <code>concept</code>, <code>constinit</code>,<ref name="constinit"/> <code>consteval</code>, <code>co_await</code>, <code>co_return</code>, <code>co_yield</code>, <code>requires</code> (प्लस के लिए परिवर्तित अर्थ <code>export</code>) और <code>char8_t</code> ([[UTF-8|यूटीएफ-8]] समर्थन के लिए)<ref>{{cite web|url=https://en.cppreference.com/w/cpp/keyword|title=C++ keywords - cppreference.com|website=en.cppreference.com|access-date=2019-08-04|archive-date=2012-03-19|archive-url=https://web.archive.org/web/20120319210634/https://en.cppreference.com/w/cpp/keyword|url-status=live}}</ref> और <code>explicit</code> सी ++ 20 के बाद से अभिव्यक्ति को ग्रहण कर सकता है।<ref>{{cite web|url=https://en.cppreference.com/w/cpp/language/explicit|title=explicit specifier - cppreference.com|website=en.cppreference.com|access-date=2019-08-04|archive-date=2012-02-21|archive-url=https://web.archive.org/web/20120221163715/https://en.cppreference.com/w/cpp/language/explicit|url-status=live}}</ref> इसके अधिकांश उपयोग <code>[[Volatile (computer programming)|volatile]]</code> कीवर्ड को बहिष्कृत कर दिया गया है।<ref name="volatile"/> | ||
खोजशब्दों के अतिरिक्त नए विशेष अर्थ वाले पहचानकर्ता भी हैं। <code>import</code> और <code>module</code>. सी ++ 20 में नई विशेषताएँ:<code><nowiki>[[likely]]</nowiki></code>, <code><nowiki>[[unlikely]]</nowiki></code>, और <code><nowiki>[[no_unique_address]]</nowiki></code><ref>{{cite web|url=https://en.cppreference.com/w/cpp/language/attributes|title=attribute specifier sequence(since C++11) - cppreference.com|website=en.cppreference.com|access-date=2019-08-04|archive-date=2012-07-05|archive-url=https://web.archive.org/web/20120705235229/https://en.cppreference.com/w/cpp/language/attributes|url-status=live}}</ref> हैं। | |||
| Line 104: | Line 101: | ||
* [[बजना]] में आंशिक C++20 समर्थन है जिसे विकल्प के साथ सक्षम किया जा सकता है <code>-std=c++20</code> (संस्करण 10 और बाद में) या <code>-std=c++2a</code> (संस्करण 9 और पूर्व)।<ref>{{Cite web |title=Clang - C++ Programming Language Status |url=https://clang.llvm.org/cxx_status.html |access-date=2022-04-19 |website=clang.llvm.org |archive-date=2013-07-04 |archive-url=https://web.archive.org/web/20130704124639/http://clang.llvm.org/cxx_status.html |url-status=live }}</ref> | * [[बजना]] में आंशिक C++20 समर्थन है जिसे विकल्प के साथ सक्षम किया जा सकता है <code>-std=c++20</code> (संस्करण 10 और बाद में) या <code>-std=c++2a</code> (संस्करण 9 और पूर्व)।<ref>{{Cite web |title=Clang - C++ Programming Language Status |url=https://clang.llvm.org/cxx_status.html |access-date=2022-04-19 |website=clang.llvm.org |archive-date=2013-07-04 |archive-url=https://web.archive.org/web/20130704124639/http://clang.llvm.org/cxx_status.html |url-status=live }}</ref> | ||
* [[एडिसन डिजाइन समूह]] ने संस्करण 5.0 में C++20 सुविधाओं को लागू करना शुरू किया और संस्करण 6.1 के रूप में अधिकांश C++20 कोर भाषा सुविधाओं का समर्थन करता है।<ref>{{Cite web |title=C++ compiler support - cppreference.com |url=https://en.cppreference.com/w/cpp/compiler_support |website=en.cppreference.com |access-date=2020-10-10 |archive-date=2020-10-03 |archive-url=https://web.archive.org/web/20201003141955/https://en.cppreference.com/w/cpp/compiler_support |url-status=live }}</ref> | * [[एडिसन डिजाइन समूह]] ने संस्करण 5.0 में C++20 सुविधाओं को लागू करना शुरू किया और संस्करण 6.1 के रूप में अधिकांश C++20 कोर भाषा सुविधाओं का समर्थन करता है।<ref>{{Cite web |title=C++ compiler support - cppreference.com |url=https://en.cppreference.com/w/cpp/compiler_support |website=en.cppreference.com |access-date=2020-10-10 |archive-date=2020-10-03 |archive-url=https://web.archive.org/web/20201003141955/https://en.cppreference.com/w/cpp/compiler_support |url-status=live }}</ref> | ||
* GNU संकलक संग्रह ने 2017 में आंशिक, प्रयोगात्मक C++20 समर्थन जोड़ा<ref>{{Cite web |title=Andrew Sutton - [PATCH] Add -std=c++2a |url=https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01234.html |access-date=2022-04-19 |website=gcc.gnu.org |archive-date=2021-03-01 |archive-url=https://web.archive.org/web/20210301065559/https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01234.html |url-status=live }}</ref> विकल्प के माध्यम से संस्करण 8 में <code>-std=c++2a</code>. क्लैंग की तरह, जीसीसी ने इस विकल्प को <code>-std=c++20</code> संस्करण 10 में। इसमें प्रायोगिक C++20 समर्थन के | * GNU संकलक संग्रह ने 2017 में आंशिक, प्रयोगात्मक C++20 समर्थन जोड़ा<ref>{{Cite web |title=Andrew Sutton - [PATCH] Add -std=c++2a |url=https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01234.html |access-date=2022-04-19 |website=gcc.gnu.org |archive-date=2021-03-01 |archive-url=https://web.archive.org/web/20210301065559/https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01234.html |url-status=live }}</ref> विकल्प के माध्यम से संस्करण 8 में <code>-std=c++2a</code>. क्लैंग की तरह, जीसीसी ने इस विकल्प को <code>-std=c++20</code> संस्करण 10 में। इसमें प्रायोगिक C++20 समर्थन के अतिरिक्त GNU एक्सटेंशन को सक्षम करने का विकल्प भी है, <code>-std=gnu++20</code>.<ref>{{Cite web |title=C++ Standards Support in GCC - GNU Project |url=https://gcc.gnu.org/projects/cxx-status.html |access-date=2022-04-19 |website=gcc.gnu.org |archive-date=2022-04-20 |archive-url=https://web.archive.org/web/20220420114133/https://gcc.gnu.org/projects/cxx-status.html |url-status=live }}</ref> | ||
Revision as of 12:13, 28 February 2023
| C++ language revisions |
|---|
C++20 सी++ प्रोग्रामिंग भाषा के लिए मानकीकरण के लिए अंतर्राष्ट्रीय संगठन या अंतर्राष्ट्रीय इंटरनेशनल इलेक्ट्रोटेक्नीकल कमीशन मानक का एक संस्करण है। सी++20 ने सी++ मानक के पूर्व संस्करण को बदल दिया। जिसे सी++17 कहा जाता है।[1] मानक को विधि रूप से अंतिम रूप दिया गया था।[2] फरवरी 2020 में प्राहा में बैठक में आईएसओ/आईईसी जेटीसी 1/एससी 22 द्वारा[3] 4 सितंबर 2020 को स्वीकृत किया गया[4][5] और दिसंबर 2020 में प्रकाशित हुआ।[6]
सुविधाएँ
सी++20 सी++14 या सी++17 की तुलना में अधिक नई प्रमुख विशेषताएं जोड़ता है।[7] सी++20 में स्वीकार किए गए परिवर्तनों में भी सम्मिलित हैं।[8]
भाषा
- अवधारणाएं (सी ++)[9] संक्षिप्त वाक्य रचना के साथ[10]
- मॉड्यूलर प्रोग्रामिंग[11]
- नामक प्रारंभकर्ता[12] (सी99 फीचर और सामान्य जीएनयू संकलक संग्रह और जी++ एक्सटेंशन पर आधारित)
[=, 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] - कोरूटीन[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 (यूटीएफ-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.