C++14: Difference between revisions

From Vigyanwiki
m (Sugatha moved page सी ++ 14 to C++14 without leaving a redirect)
No edit summary
Line 1: Line 1:
सी++14, सी++ प्रोग्रामिंग भाषा के लिए आईएसओ/आईइसी मानक का संस्करण है। इसका उद्देश्य सी++11 पर कम विस्तार होना है, जिसमे मुख्य प्रकार से बग फिक्स और छोटे सुधार सम्मिलित हैं, और इसे सी++17 द्वारा प्रतिस्थापित किया गया था। इसकी स्वीकृति की घोषणा 18 अगस्त 2014 को की गई थी। सी++14 को दिसंबर 2014 में आईएसओ/आईइसी के रूप में प्रकाशित किया गया था, क्योंकि पहले सी++ मानक संशोधनों में काफी देर हो चुकी थी, सी++1वाई मानक को कभी-कभी इसके संशोधनों तक का उपयोग किया जाता था, इसी प्रकार सी++11 मानक को सी++0एक्स कहा जाता था, इसके रिलीज की अपेक्षा के साथ 2010 से पहले था (चूँकि वास्तव में यह 2010 और अंत में 2011 में {{C++ language revisions}}
C++14, C++ प्रोग्रामिंग भाषा के लिए आईएसओ/आईइसी मानक का संस्करण है। इसका उद्देश्य C++11 पर कम विस्तार होना है, जिसमे मुख्य प्रकार से बग फिक्स और छोटे सुधार सम्मिलित हैं, और इसे C++17 द्वारा प्रतिस्थापित किया गया था। इसकी स्वीकृति की घोषणा 18 अगस्त 2014 को की गई थी। C++14 को दिसंबर 2014 में आईएसओ/आईइसी के रूप में प्रकाशित किया गया था, क्योंकि पहले C++ मानक संशोधनों में काफी देर हो चुकी थी, C++1वाई मानक को कभी-कभी इसके संशोधनों तक का उपयोग किया जाता था, इसी प्रकार C++11 मानक को C++0एक्स कहा जाता था, इसके रिलीज की अपेक्षा के साथ 2010 से पहले था (चूँकि वास्तव में यह 2010 और अंत में 2011 में {{C++ language revisions}}


=== नई भाषा सुविधाएँ ===
=== नई भाषा सुविधाएँ ===
ये सी++14 की मुख्य भाषा में जोड़े गए फीचर हैं।  
ये C++14 की मुख्य भाषा में जोड़े गए फीचर हैं।  


=== फंक्शन रिटर्न टाइप परिणाम ===
=== फंक्शन रिटर्न टाइप परिणाम ===
सी++११ ने लैम्ब्डा फंक्शन को रिटर्न स्टेटमेंट को दिए गए एक्सप्रेशन के प्रकार के आधार पर रिटर्न टाइप निकलने की अनुमति दी है। सी++१४ सभी फंक्शन के लिए यह क्षमता प्रदान करता है। इन सुविधाओं को लैम्ब्डा फंक्शन तक विस्तारित करता है जो उन फंक्शन के लिए रिटर्न टाइप की परिणाम की अनुमति देता है,रिटर्न एक्सप्रेशन जो फॉर्म के नहीं हैं।  
C++11 ने लैम्ब्डा फंक्शन को रिटर्न स्टेटमेंट को दिए गए एक्सप्रेशन के प्रकार के आधार पर रिटर्न टाइप निकलने की अनुमति दी है। C++14 सभी फंक्शन के लिए यह क्षमता प्रदान करता है। इन सुविधाओं को लैम्ब्डा फंक्शन तक विस्तारित करता है जो उन फंक्शन के लिए रिटर्न टाइप की परिणाम की अनुमति देता है,रिटर्न एक्सप्रेशन जो फॉर्म के नहीं हैं।  


रिटर्न प्रकार के परिणाम को प्रेरित करने के लिए, फंक्शन को ऑटो रिटर्न प्रकार के साथ घोषित किया जाना चाहिए, परन्तु सी++११ पिछले रिटर्न प्रकार विनिर्देशक के बिना:
रिटर्न प्रकार के परिणाम को प्रेरित करने के लिए, फंक्शन को ऑटो रिटर्न प्रकार के साथ घोषित किया जाना चाहिए, परन्तु C++11 पिछले रिटर्न प्रकार विनिर्देशक के बिना:


ऑटो रिटर्न प्रकार परिणाम () ; // रिटर्न प्रकार निर्धारित किया जाना चाहिए।  
ऑटो रिटर्न प्रकार परिणाम () ; // रिटर्न प्रकार निर्धारित किया जाना चाहिए।  
Line 19: Line 19:
=== अल्टरनेट टाइप डिडक्शन पर डिक्लिरिएशन  ===
=== अल्टरनेट टाइप डिडक्शन पर डिक्लिरिएशन  ===


सी++11 में, टाइप डिडक्शन के दो प्रकार जोड़े गए थे। ऑटो दी गई एक्सप्रेशन के आधार पर उपयुक्त प्रकार का वेरिएबल बनाने का युक्ति था। डेसिअलटाइप दी गई एक्सप्रेशन के प्रकार की गणना करने का युक्ति था। चूँकि, डेसिअलटाइप और ऑटो टाइप अलग-अलग प्रकार से निकालते हैं। विशेष प्रकार से, ऑटो निरंतर नॉन-रेफरेंस टाइप का अनुमान लगाता है, जैसे कि उपयोग करके एसटीडी::डीके, जबकि ऑटो&& अधिकतर रेफरेन्स निकालता है। चूँकि, डेसिअलटाइप एक्सप्रेशन वैल्यू श्रेणी और एक्सप्रेशन की प्रकृति के आधार पर रेफरेन्स या नॉन-रेफरेन्स टाइप को कम करने के लिए प्रेरित किया जा सकता है:<ref>{{Cite web|url=http://thbecker.net/articles/auto_and_decltype/section_10.html|title = Page 10 of: C++ auto and decltype Explained}}</ref><ref name="wong1">{{cite web|last = Wong|first = Michael|title = The View from the C++ Standard meeting April 2013 Part 1|url = https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_from_c_standard_meeting_april_2013_part_1?lang=en|work = C/C++ Cafe|date = 30 April 2013|access-date = 27 January 2016}}</ref>
C++11 में, टाइप डिडक्शन के दो प्रकार जोड़े गए थे। ऑटो दी गई एक्सप्रेशन के आधार पर उपयुक्त प्रकार का वेरिएबल बनाने का युक्ति था। डेसिअलटाइप दी गई एक्सप्रेशन के प्रकार की गणना करने का युक्ति था। चूँकि, डेसिअलटाइप और ऑटो टाइप अलग-अलग प्रकार से निकालते हैं। विशेष प्रकार से, ऑटो निरंतर नॉन-रेफरेंस टाइप का अनुमान लगाता है, जैसे कि उपयोग करके एसटीडी::डीके, जबकि ऑटो&& अधिकतर रेफरेन्स निकालता है। चूँकि, डेसिअलटाइप एक्सप्रेशन वैल्यू श्रेणी और एक्सप्रेशन की प्रकृति के आधार पर रेफरेन्स या नॉन-रेफरेन्स टाइप को कम करने के लिए प्रेरित किया जा सकता है:<ref>{{Cite web|url=http://thbecker.net/articles/auto_and_decltype/section_10.html|title = Page 10 of: C++ auto and decltype Explained}}</ref><ref name="wong1">{{cite web|last = Wong|first = Michael|title = The View from the C++ Standard meeting April 2013 Part 1|url = https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_from_c_standard_meeting_april_2013_part_1?lang=en|work = C/C++ Cafe|date = 30 April 2013|access-date = 27 January 2016}}</ref>


आईएनटी  आई;
आईएनटी  आई;
Line 37: Line 37:
डेसिअलटाइप (एफ())  एक्स5डी=एफ();   // डेसिअलटाइप (एक्स5डी) है आईएनटी       
डेसिअलटाइप (एफ())  एक्स5डी=एफ();   // डेसिअलटाइप (एक्स5डी) है आईएनटी       


सी ++ 14 जोड़ता है डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) है। यह स्वतः घोषणाओं को ऑटो एक्सप्रेशन पर डेसिअलटाइप नियमों का उपयोग करने की अनुमति देता है। डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) का उपयोग फंक्शन रिटर्न टाइप परिणाम के साथ भी किया जा सकता है डेसिअलटाइप (ऑटो) इसके  विपरीत सिंटैक्स (वाक्य-रचना) ऑटो फंक्शन के रिटर्न टाइप की परिणाम के लिए है।<ref name="deduce">{{cite web|title=N3638 Return type deduction for normal functions (Revision 5)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3638.html|last=Merrill|first=Jason|date=17 April 2013|access-date=14 June 2013}}</ref>
C++ 14 जोड़ता है डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) है। यह स्वतः घोषणाओं को ऑटो एक्सप्रेशन पर डेसिअलटाइप नियमों का उपयोग करने की अनुमति देता है। डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) का उपयोग फंक्शन रिटर्न टाइप परिणाम के साथ भी किया जा सकता है डेसिअलटाइप (ऑटो) इसके  विपरीत सिंटैक्स (वाक्य-रचना) ऑटो फंक्शन के रिटर्न टाइप की परिणाम के लिए है।<ref name="deduce">{{cite web|title=N3638 Return type deduction for normal functions (Revision 5)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3638.html|last=Merrill|first=Jason|date=17 April 2013|access-date=14 June 2013}}</ref>
 
 
 
=== रिलैक्स्ड कॉन्स्टेक्सपर प्रतिबंध ===
=== रिलैक्स्ड कॉन्स्टेक्सपर प्रतिबंध ===


सी++11 ने कॉन्सटेक्सपर-डिक्लियर्ड फंक्शन की अवधारणा प्रस्तुत की; फंक्शन जिसे संकलन समय पर निष्पादित किया जा सकता है। उनके रिटर्न वैल्यू को उन ऑपरेशनों द्वारा उपभोग किया जा सकता है जिनके लिए निरंतर एक्सप्रेशन आवश्यकता होती है, जैसे पूर्णांक टेम्पलेट तर्क इत्यादि है। चूँकि, सी++11 कॉन्सटेक्सपर फंक्शन में मात्र एक ही एक्सप्रेशन हो सकता है जो लौटाया जाता है (साथ ही स्टैटिक एसर्ट और अन्य घोषणाओं की छोटी संख्या है)।
C++11 ने कॉन्सटेक्सपर-डिक्लियर्ड फंक्शन की अवधारणा प्रस्तुत की; फंक्शन जिसे संकलन समय पर निष्पादित किया जा सकता है। उनके रिटर्न वैल्यू को उन ऑपरेशनों द्वारा उपभोग किया जा सकता है जिनके लिए निरंतर एक्सप्रेशन आवश्यकता होती है, जैसे पूर्णांक टेम्पलेट तर्क इत्यादि है। चूँकि, C++11 कॉन्सटेक्सपर फंक्शन में मात्र एक ही एक्सप्रेशन हो सकता है जो लौटाया जाता है (साथ ही स्टैटिक एसर्ट और अन्य घोषणाओं की छोटी संख्या है)।


सी++14 इन रेस्ट्रिक्शन्स (प्रतिबंधों) को रिलेक्स्ड करता है। कॉन्सटेक्सपर- डिक्लियर्ड फंक्शन में अब निम्नलिखित सम्मिलित हो सकते हैं:<ref name=wong1/>
C++14 इन रेस्ट्रिक्शन्स (प्रतिबंधों) को रिलेक्स्ड करता है। कॉन्सटेक्सपर- डिक्लियर्ड फंक्शन में अब निम्नलिखित सम्मिलित हो सकते हैं:<ref name=wong1/>


* को छोड़कर कोई भी घोषणा:
* को छोड़कर कोई भी घोषणा:
Line 54: Line 51:
* एक्सप्रेशंस जो किसी ऑब्जेक्ट के वैल्यू को बदल देती हैं यदि उस ऑब्जेक्ट का लाइफटाइम (जीवनकाल) कांस्टेंट एक्सप्रेशन फंक्शन के अंतर्गत प्रारम्भ होता है। इसमें किसी भी नॉन-कॉन्स्ट कॉन्सटेक्सपर-डिक्लियर्ड नॉन-स्टैटिक मेंबर फंक्शन होता है।
* एक्सप्रेशंस जो किसी ऑब्जेक्ट के वैल्यू को बदल देती हैं यदि उस ऑब्जेक्ट का लाइफटाइम (जीवनकाल) कांस्टेंट एक्सप्रेशन फंक्शन के अंतर्गत प्रारम्भ होता है। इसमें किसी भी नॉन-कॉन्स्ट कॉन्सटेक्सपर-डिक्लियर्ड नॉन-स्टैटिक मेंबर फंक्शन होता है।


गोटो सी ++ 14 रिलैक्स्ड से कॉन्सटेक्सपर-डिक्लियर्ड फंक्शन में स्टेटमेंट प्रतिबंधित हैं।
गोटो C++ 14 रिलैक्स्ड से कॉन्सटेक्सपर-डिक्लियर्ड फंक्शन में स्टेटमेंट प्रतिबंधित हैं।


साथ ही, सी ++ 11 ने कहा कि सभी नॉन-स्टैटिक फंक्शन कॉन्स्टैक्सपर भी स्पष्ट प्रकार से डिक्लियर्ड किए गए थे, इस संबंध में भी स्पष्ट प्रकार से डिक्लियर्ड कॉन्स्ट थे | वह तब से हटा दिया गया है; नॉन-स्टैटिक मेंबर फंक्शन नॉन-कॉन्स्ट हो सकते हैं। <ref>{{cite web|title=N3652 Relaxing constraints on constexpr functions|first=Richard|last=Smith|date=18 April 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3652.html}}</ref> चूँकि, उपरोक्त  रेस्ट्रिक्शन के अनुकूल, नॉन-कॉन्स्ट कॉन्स्टैक्सपर मेंबर फंक्शन मात्र एक वर्ग मेंबर को संशोधित कर सकता है यदि उस ऑब्जेक्ट का लाइफटाइम निरंतर एक्सप्रेशन इवैल्यूएशन के अंतर्गत प्रारम्भ हुआ हो।
साथ ही C++11 ने कहा कि सभी नॉन-स्टैटिक फंक्शन कॉन्स्टैक्सपर भी स्पष्ट प्रकार से डिक्लियर्ड किए गए थे, इस संबंध में भी स्पष्ट प्रकार से डिक्लियर्ड कॉन्स्ट थे | वह तब से हटा दिया गया है; नॉन-स्टैटिक मेंबर फंक्शन नॉन-कॉन्स्ट हो सकते हैं। <ref>{{cite web|title=N3652 Relaxing constraints on constexpr functions|first=Richard|last=Smith|date=18 April 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3652.html}}</ref> चूँकि, उपरोक्त  रेस्ट्रिक्शन के अनुकूल, नॉन-कॉन्स्ट कॉन्स्टैक्सपर मेंबर फंक्शन मात्र एक वर्ग मेंबर को संशोधित कर सकता है यदि उस ऑब्जेक्ट का लाइफटाइम निरंतर एक्सप्रेशन इवैल्यूएशन के अंतर्गत प्रारम्भ हुआ हो।


=== वेरिएबल टेम्पलेट्स ===
=== वेरिएबल टेम्पलेट्स ===


सी ++ के पूर्व संस्करणों में, मात्र फंक्शन, क्लासेस या टाइप उपनामों को टेम्पलेट किया जा सकता है। सी++14 टेम्पलेटेड वेरिएबल के निर्माण की अनुमति देता है। प्रस्ताव में दिया गया उदाहरण वेरिएबल है पीआई जिसे विभिन्न प्रकारों के लिए पाई का मान प्राप्त करने के लिए पढ़ा जा सकता है (जैसे, 3 जब एक अभिन्न प्रकार के रूप में पढ़ा जाता है; के साथ संभव निकटतम मूल्य फ्लोट, डबल या लॉन्ग डबल उपयुक्त जब प्रकार में पढ़ने पर डबल या लॉन्ग डबल इत्यादि है)।
सी ++ के पूर्व संस्करणों में, मात्र फंक्शन, क्लासेस या टाइप उपनामों को टेम्पलेट किया जा सकता है। C++14 टेम्पलेटेड वेरिएबल के निर्माण की अनुमति देता है। प्रस्ताव में दिया गया उदाहरण वेरिएबल है पीआई जिसे विभिन्न प्रकारों के लिए पाई का मान प्राप्त करने के लिए पढ़ा जा सकता है (जैसे, 3 जब एक अभिन्न प्रकार के रूप में पढ़ा जाता है; के साथ संभव निकटतम मूल्य फ्लोट, डबल या लॉन्ग डबल उपयुक्त जब प्रकार में पढ़ने पर डबल या लॉन्ग डबल इत्यादि है)।


विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम क्रियान्वित होते हैं।<ref name=isocpp/><ref>{{cite web|title=N3651 Variable Templates (Revision 1)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3651.pdf|last=Dos Reis|first=Gabriel|date=19 April 2013}}</ref>  
विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम क्रियान्वित होते हैं।<ref name=isocpp/><ref>{{cite web|title=N3651 Variable Templates (Revision 1)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3651.pdf|last=Dos Reis|first=Gabriel|date=19 April 2013}}</ref>  
Line 76: Line 73:
सी ++ 11 ने  मेंबर प्रारंभकर्ता जोड़े, यदि कोई निर्माता मेंबर को स्वयं प्रारंभ नहीं करता है तो क्लास के स्कोप में मेंबर्स पर क्रियान्वित होने वाले एक्सप्रेशन हैं। मेंबर  प्रारंभकर्ताओं के साथ किसी भी वर्ग को स्पष्ट प्रकार से बाहर करने के लिए समुच्चय की परिभाषा बदल दी गई थी; इसलिए, उन्हें कुल आरंभीकरण का उपयोग करने की अनुमति नहीं है।
सी ++ 11 ने  मेंबर प्रारंभकर्ता जोड़े, यदि कोई निर्माता मेंबर को स्वयं प्रारंभ नहीं करता है तो क्लास के स्कोप में मेंबर्स पर क्रियान्वित होने वाले एक्सप्रेशन हैं। मेंबर  प्रारंभकर्ताओं के साथ किसी भी वर्ग को स्पष्ट प्रकार से बाहर करने के लिए समुच्चय की परिभाषा बदल दी गई थी; इसलिए, उन्हें कुल आरंभीकरण का उपयोग करने की अनुमति नहीं है।


सी++14 इस रेस्ट्रिक्शन को रिलेक्स्ड करता है,<ref name=wong1 /> ऐसे प्रकारों पर कुल आरंभीकरण की अनुमति देना है। यदि ब्रेस्ड इनिट सूची उस तर्क के लिए कोई मान प्रदान नहीं करती है, तो मेंबर प्रारंभकर्ता इसका ध्यान रखता है।<ref>{{cite web|title=N3653 Member initializers and aggregates|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3653.html|date=17 April 2013|first1=Daveed|last1=Vandevoorde|first2=Ville|last2=Voutilainen}}</ref>
C++14 इस रेस्ट्रिक्शन को रिलेक्स्ड करता है,<ref name=wong1 /> ऐसे प्रकारों पर कुल आरंभीकरण की अनुमति देना है। यदि ब्रेस्ड इनिट सूची उस तर्क के लिए कोई मान प्रदान नहीं करती है, तो मेंबर प्रारंभकर्ता इसका ध्यान रखता है।<ref>{{cite web|title=N3653 Member initializers and aggregates|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3653.html|date=17 April 2013|first1=Daveed|last1=Vandevoorde|first2=Ville|last2=Voutilainen}}</ref>
 
 
=== बाइनरी शाब्दिक ===
=== बाइनरी शाब्दिक ===


सी ++ 14 में संख्यात्मक अक्षर [[बाइनरी संख्या]] में निर्दिष्ट किए जा सकते हैं।<ref name=wong1 />सिंटैक्स उपसर्गों θबी या θबी का उपयोग करते हैं। सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदाहरण [[जावा (प्रोग्रामिंग भाषा)|जावा]], सी, [[स्विफ्ट (प्रोग्रामिंग भाषा)|स्विफ्ट]], [[जाओ (प्रोग्रामिंग भाषा)|जाओ]], [[स्काला (प्रोग्रामिंग भाषा)|स्काला]], [[रूबी (प्रोग्रामिंग भाषा)|रूबी]], पायथन, ओसीएएमएल, और कम से कम 2007 से कुछ सी कंपाइलर्स में अनौपचारिक विस्तार के रूप में हुआ है।<ref name=gccbinaryliteralbugreport>{{Cite web|url=https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479#c29|title = 23479 – Implement binary constants with a "0b" prefix}}</ref>
सी ++ 14 में संख्यात्मक अक्षर [[बाइनरी संख्या]] में निर्दिष्ट किए जा सकते हैं।<ref name=wong1 />सिंटैक्स उपसर्गों θबी या θबी का उपयोग करते हैं। सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदाहरण [[जावा (प्रोग्रामिंग भाषा)|जावा]], सी, [[स्विफ्ट (प्रोग्रामिंग भाषा)|स्विफ्ट]], [[जाओ (प्रोग्रामिंग भाषा)|जाओ]], [[स्काला (प्रोग्रामिंग भाषा)|स्काला]], [[रूबी (प्रोग्रामिंग भाषा)|रूबी]], पायथन, ओसीएएमएल, और कम से कम 2007 से कुछ सी कंपाइलर्स में अनौपचारिक विस्तार के रूप में हुआ है।<ref name=gccbinaryliteralbugreport>{{Cite web|url=https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479#c29|title = 23479 – Implement binary constants with a "0b" prefix}}</ref>
=== अंक विभाजक ===
=== अंक विभाजक ===


सी ++ 14 में, सिंगल-कोट वर्ण को [[पूर्णांक शाब्दिक]] अंकों के विभाजक के रूप में संख्यात्मक शाब्दिक, दोनों पूर्णांक शाब्दिक और फ्लोटिंग स्थान शाब्दिक के रूप में इनिसीअलाइज़्ड  प्रकार से उपयोग किया जा सकता है।<ref>{{cite web|title=N3781 Single-Quotation-Mark as a Digit Separator|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf |date=25 September 2013 |first1=Lawrence|last1=Crowl|first2=Richard|last2=Smith|first3=Jeff|last3=Snyder|first4=Daveed|last4=Vandevoorde}}</ref> यह मानव पाठकों के लिए सबटाइजिंग के माध्यम से बड़ी संख्या को पार्स करना सरल बना सकता है।
C++ 14 में, सिंगल-कोट वर्ण को [[पूर्णांक शाब्दिक]] अंकों के विभाजक के रूप में संख्यात्मक शाब्दिक, दोनों पूर्णांक शाब्दिक और फ्लोटिंग स्थान शाब्दिक के रूप में इनिसीअलाइज़्ड  प्रकार से उपयोग किया जा सकता है।<ref>{{cite web|title=N3781 Single-Quotation-Mark as a Digit Separator|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf |date=25 September 2013 |first1=Lawrence|last1=Crowl|first2=Richard|last2=Smith|first3=Jeff|last3=Snyder|first4=Daveed|last4=Vandevoorde}}</ref> यह मानव पाठकों के लिए सबटाइजिंग के माध्यम से बड़ी संख्या को पार्स करना सरल बना सकता है।


ऑटो पूर्णांक_लिटरल = 1'000'000;
ऑटो पूर्णांक_लिटरल = 1'000'000;
Line 98: Line 91:
=== सामान्य लैम्ब्डा ===
=== सामान्य लैम्ब्डा ===


सी ++ 11 में, अज्ञात फंक्शन पैरामीटर को ठोस प्रकारों के साथ डिक्लियर्ड करने की आवश्यकता है। सी ++ 14 इस आवश्यकता को रिलैक्स्ड देता है, जिससे लैम्ब्डा  फंक्शन पैरामीटर को ऑटो टाइप विनिर्देशक के साथ डिक्लियर्ड करने की अनुमति देता है। <ref name=isocpp>{{cite web|last=Sutter|first=Herb|author-link=Herb Sutter|title=Trip Report: ISO C++ Spring 2013 Meeting|url=http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting|date=20 April 2013|website=isocpp.org|access-date=14 June 2013}}</ref>  
C++11 में, अज्ञात फंक्शन पैरामीटर को ठोस प्रकारों के साथ डिक्लियर्ड करने की आवश्यकता है। सी ++ 14 इस आवश्यकता को रिलैक्स्ड देता है, जिससे लैम्ब्डा  फंक्शन पैरामीटर को ऑटो टाइप विनिर्देशक के साथ डिक्लियर्ड करने की अनुमति देता है। <ref name=isocpp>{{cite web|last=Sutter|first=Herb|author-link=Herb Sutter|title=Trip Report: ISO C++ Spring 2013 Meeting|url=http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting|date=20 April 2013|website=isocpp.org|access-date=14 June 2013}}</ref>  


ऑटो लैम्ब्डा = [] (ऑटो एक्स, ऑटो वाई) {रिटर्न एक्स+वाई;};  
ऑटो लैम्ब्डा = [] (ऑटो एक्स, ऑटो वाई) {रिटर्न एक्स+वाई;};  
Line 115: Line 108:
=== लैम्ब्डा कैप्चर एक्सप्रेशंस ===
=== लैम्ब्डा कैप्चर एक्सप्रेशंस ===


सी++11 लैम्ब्डा फंक्शन वैल्यू-कॉपी या रेफरेन्स द्वारा उनके बाहरी स्कोप में डिक्लिरिएशन वेरिएबल को कैप्चर करता है। इसका अर्थ है कि लैम्ब्डा के वैल्यू मेंबर  मात्र-चलने वाले प्रकार नहीं हो सकते हैं।<ref>{{cite web|title=Move capture in Lambda|url=https://stackoverflow.com/questions/8640393/move-capture-in-lambda|website=[[Stack Overflow (website)|Stack Overflow]]}}</ref> सी ++ 14 अधिकार किए गए मेंबर को इनिसीअलाइज़्ड प्रकार से एक्सप्रेशन के साथ प्रारंभ करने की अनुमति देता है। यह वैल्यू-मूव द्वारा अधिकार करने और लैम्ब्डा के इनिसीअलाइज़्ड मेंबर को डिक्लियर्ड करने की अनुमति देता है, बाहरी क्षेत्र में समान प्रकार से के बिना है।<ref name=isocpp/>
C++11 लैम्ब्डा फंक्शन वैल्यू-कॉपी या रेफरेन्स द्वारा उनके बाहरी स्कोप में डिक्लिरिएशन वेरिएबल को कैप्चर करता है। इसका अर्थ है कि लैम्ब्डा के वैल्यू मेंबर  मात्र-चलने वाले प्रकार नहीं हो सकते हैं।<ref>{{cite web|title=Move capture in Lambda|url=https://stackoverflow.com/questions/8640393/move-capture-in-lambda|website=[[Stack Overflow (website)|Stack Overflow]]}}</ref>C++14 अधिकार किए गए मेंबर को इनिसीअलाइज़्ड प्रकार से एक्सप्रेशन के साथ प्रारंभ करने की अनुमति देता है। यह वैल्यू-मूव द्वारा अधिकार करने और लैम्ब्डा के इनिसीअलाइज़्ड मेंबर को डिक्लियर्ड करने की अनुमति देता है, बाहरी क्षेत्र में समान प्रकार से के बिना है।<ref name=isocpp/>


यह इनिसीअलाइज़र एक्सप्रेशन के उपयोग के माध्यम से किया जाता है:
यह इनिसीअलाइज़र एक्सप्रेशन के उपयोग के माध्यम से किया जाता है:
Line 150: Line 143:
=== शेयर्ड म्यूटेक्स और लॉकिंग ===
=== शेयर्ड म्यूटेक्स और लॉकिंग ===


सी ++ 14 शेयर्ड टाइम म्यूटेक्स और सहयोगी शेयर्ड लॉक टाइप जोड़ता है।<ref name=wong3>{{cite web|last=Wong|first=Michael|title=The View from the C++ Standard meeting April 2013 Part 3|url=https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_form_the_c_standard_meeting_april_2013_part_3?lang=en|work=C/C++ Cafe|access-date=14 June 2013|date=30 April 2013}}</ref><ref>{{cite web|title=N3659 Shared locking in C++ (Revision 2)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3659.html|date=19 April 2013|first1=Howard|last1=Hinnant|first2=Detlef|last2=Vollmann|first3=Hans|last3=Boehm}}</ref>
C++ 14 शेयर्ड टाइम म्यूटेक्स और सहयोगी शेयर्ड लॉक टाइप जोड़ता है।<ref name=wong3>{{cite web|last=Wong|first=Michael|title=The View from the C++ Standard meeting April 2013 Part 3|url=https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_form_the_c_standard_meeting_april_2013_part_3?lang=en|work=C/C++ Cafe|access-date=14 June 2013|date=30 April 2013}}</ref><ref>{{cite web|title=N3659 Shared locking in C++ (Revision 2)|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3659.html|date=19 April 2013|first1=Howard|last1=Hinnant|first2=Detlef|last2=Vollmann|first3=Hans|last3=Boehm}}</ref>




=== अस्सोसिएटिव कंटेनरों में विषम लुकअप ===
=== अस्सोसिएटिव कंटेनरों में विषम लुकअप ===


[[सी ++ मानक पुस्तकालय|सी ++ स्टैण्डर्ड लाइब्रेरी]] चार सहयोगी कंटेनर वर्गों को परिभाषित करता है। ये वर्ग उपयोगकर्ता को उस प्रकार के वैल्यू के आधार पर वैल्यू देखने की अनुमति देते हैं। मैप कंटेनर उपयोगकर्ता को कुंजी और मान निर्दिष्ट करने की अनुमति देता है, जहां कुंजी द्वारा लुकअप किया जाता है और मान देता है। चूँकि, लुकअप निरनतर विशिष्ट कुंजी प्रकार द्वारा किया जाता है, भले ही वह मानचित्र की तरह कुंजी हो या समूह के रूप में स्वयं मान हो।
C [[सी ++ मानक पुस्तकालय|++ स्टैण्डर्ड लाइब्रेरी]] चार सहयोगी कंटेनर वर्गों को परिभाषित करता है। ये वर्ग उपयोगकर्ता को उस प्रकार के वैल्यू के आधार पर वैल्यू देखने की अनुमति देते हैं। मैप कंटेनर उपयोगकर्ता को कुंजी और मान निर्दिष्ट करने की अनुमति देता है, जहां कुंजी द्वारा लुकअप किया जाता है और मान देता है। चूँकि, लुकअप निरनतर विशिष्ट कुंजी प्रकार द्वारा किया जाता है, भले ही वह मानचित्र की तरह कुंजी हो या समूह के रूप में स्वयं मान हो।


सी ++ 14 लुकअप को इनिसीअलाइज़्ड प्रकार के माध्यम से करने की अनुमति देता है, जब तक कि समान ऑपरेटर उस प्रकार की समानता वास्तविक कुंजी प्रकार से कर सकता है।<ref name=wong2>{{cite web|last=Wong|first=Michael|title=The View from the C++ Standard meeting April 2013 Part 2|url=https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_form_the_c_standrd_meeting_april_2013_part_2?lang=en|work=C/C++ Cafe|date=26 April 2013|access-date=14 June 2013}}</ref> यह मानचित्र की अनुमति देगा एसटीडी::स्ट्रिंग ए के विरुद्ध समान करने के लिए कुछ मूल्य कॉन्स्ट चर* या कोई अन्य प्रकार जिसके लिए  ऑपरेटर ओवरलोड उपलब्ध है। यह डमी ऑब्जेक्ट बनाने के लिए खोज के उपयोगकर्ता को परेशान किये बिना मेंबर के वैल्यू द्वारा एसटीडी::सेट में समग्र  ऑब्जेक्ट्स को अनुक्रमणित करने के लिए भी उपयोगी है (उदाहरण के लिए किसी व्यक्ति को नाम से ढूंढने के लिए सम्पूर्ण व्यक्ति की संरचना बनाना)।
C++ 14 लुकअप को इनिसीअलाइज़्ड प्रकार के माध्यम से करने की अनुमति देता है, जब तक कि समान ऑपरेटर उस प्रकार की समानता वास्तविक कुंजी प्रकार से कर सकता है।<ref name=wong2>{{cite web|last=Wong|first=Michael|title=The View from the C++ Standard meeting April 2013 Part 2|url=https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_form_the_c_standrd_meeting_april_2013_part_2?lang=en|work=C/C++ Cafe|date=26 April 2013|access-date=14 June 2013}}</ref> यह मानचित्र की अनुमति देगा एसटीडी::स्ट्रिंग ए के विरुद्ध समान करने के लिए कुछ मूल्य कॉन्स्ट चर* या कोई अन्य प्रकार जिसके लिए  ऑपरेटर ओवरलोड उपलब्ध है। यह डमी ऑब्जेक्ट बनाने के लिए खोज के उपयोगकर्ता को परेशान किये बिना मेंबर के वैल्यू द्वारा एसटीडी::सेट में समग्र  ऑब्जेक्ट्स को अनुक्रमणित करने के लिए भी उपयोगी है (उदाहरण के लिए किसी व्यक्ति को नाम से ढूंढने के लिए सम्पूर्ण व्यक्ति की संरचना बनाना)।


बैकवर्ड कम्पैटिबिलिटी को बनाए रखने के लिए, विषम लुकअप की अनुमति मात्र तभी दी जाती है जब अस्सोसिएटिव कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। स्टैण्डर्ड लाइब्रेरी क्लासेज एसटीडी::लेस<>और एसटीडी::ग्रेटर विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।<ref>{{cite web|title=N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)|date=19 March 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3657.htm}}</ref>
बैकवर्ड कम्पैटिबिलिटी को बनाए रखने के लिए, विषम लुकअप की अनुमति मात्र तभी दी जाती है जब अस्सोसिएटिव कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। स्टैण्डर्ड लाइब्रेरी क्लासेज एसटीडी::लेस<>और एसटीडी::ग्रेटर विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।<ref>{{cite web|title=N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)|date=19 March 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3657.htm}}</ref>
=== स्टैण्डर्ड उपयोगकर्ता परिभाषित लिटरल ===
=== स्टैण्डर्ड उपयोगकर्ता परिभाषित लिटरल ===


सी ++ 11 ने उपयोगकर्ता परिभाषित लिटरल प्रत्यय के लिए सिंटैक्स को परिभाषित किया, परन्तु स्टैण्डर्ड लाइब्रेरी ने उनमें से किसी का भी उपयोग नहीं किया गया है। सी ++ 14 निम्नलिखित स्टैण्डर्ड अक्षर जोड़ता है:<ref name="wong2"/>
C++ 11 ने उपयोगकर्ता परिभाषित लिटरल प्रत्यय के लिए सिंटैक्स को परिभाषित किया, परन्तु स्टैण्डर्ड लाइब्रेरी ने उनमें से किसी का भी उपयोग नहीं किया गया है। सी ++ 14 निम्नलिखित स्टैण्डर्ड अक्षर जोड़ता है:<ref name="wong2"/>


* एस, विभिन्न बनाने के लिए एसटीडी::बेसिक_स्ट्रिंग टाइप है।
* एस, विभिन्न बनाने के लिए एसटीडी::बेसिक_स्ट्रिंग टाइप है।
Line 197: Line 188:


  एसटीडी::इज_फाइनल टाइप विशेषता यह पता लगाती है कि कोई फाइनल वर्ग चिह्नित है या नहीं है। एसटीडी::कोटेड स्ट्रीम आई/ओ मैनिपुलेटर आउटपुट पर डेलीमीटर्स (डबल-कोट के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड  डेलीमीटर्स से बचने अनुमति देता है।<ref name=quoted>{{cite web | title=N3654 Quoted Strings Library Proposal (Revision 2) | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3654.html |last=Dawes|first=Beman|date=19 April 2013|access-date=5 January 2016}}</ref>
  एसटीडी::इज_फाइनल टाइप विशेषता यह पता लगाती है कि कोई फाइनल वर्ग चिह्नित है या नहीं है। एसटीडी::कोटेड स्ट्रीम आई/ओ मैनिपुलेटर आउटपुट पर डेलीमीटर्स (डबल-कोट के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड  डेलीमीटर्स से बचने अनुमति देता है।<ref name=quoted>{{cite web | title=N3654 Quoted Strings Library Proposal (Revision 2) | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3654.html |last=Dawes|first=Beman|date=19 April 2013|access-date=5 January 2016}}</ref>
== संकलक समर्थन ==
== संकलक समर्थन ==
क्लांग ने 3.4 में सी++14 के लिए सपोर्ट समाप्त कर दिया, चूँकि मानक नाम सी++1वाई के अनुसार, और क्लैंग 6 में सी++14 को डिफ़ॉल्ट सी++ मानक बनाया है।<ref>{{cite web|title=C++ Support in Clang|url=http://clang.llvm.org/cxx_status.html|access-date=28 May 2016}}</ref> जीएनयु कंपाइलर संग्रह ने जीसीसी 5 में सी++14 के लिए सपोर्ट समाप्त कर दिया, और सी++14 को जीसीसी 6 में डिफ़ॉल्ट सी++ मानक बना दिया गया है।<ref>{{cite web|title=C++ Standards Support in GCC|url=https://gcc.gnu.org/projects/cxx-status.html|access-date=28 May 2016}}</ref>  माइक्रोसॉफ्ट विज़ुअल स्टुडिओ 2017 ने लगभग सभी सी++14 सुविधाओं को क्रियान्वित कर दिया है।<ref>{{cite web|url=https://blogs.msdn.microsoft.com/vcblog/2017/03/07/c-standards-conformance-from-microsoft/|title=C++ Standards Conformance from Microsoft|date=7 March 2017|access-date=7 March 2017}}</ref>
क्लांग ने 3.4 में C++14 के लिए सपोर्ट समाप्त कर दिया, चूँकि मानक नाम C++1y के अनुसार, और क्लैंग 6 में C++14 को डिफ़ॉल्ट C++ मानक बनाया है।<ref>{{cite web|title=C++ Support in Clang|url=http://clang.llvm.org/cxx_status.html|access-date=28 May 2016}}</ref> जीएनयु कंपाइलर संग्रह ने जीसीसी 5 में C++14 के लिए सपोर्ट समाप्त कर दिया, और C++14 को जीसीसी 6 में डिफ़ॉल्ट C++ मानक बना दिया गया है।<ref>{{cite web|title=C++ Standards Support in GCC|url=https://gcc.gnu.org/projects/cxx-status.html|access-date=28 May 2016}}</ref>  माइक्रोसॉफ्ट विज़ुअल स्टुडिओ 2017 ने लगभग सभी C++14 सुविधाओं को क्रियान्वित कर दिया है।<ref>{{cite web|url=https://blogs.msdn.microsoft.com/vcblog/2017/03/07/c-standards-conformance-from-microsoft/|title=C++ Standards Conformance from Microsoft|date=7 March 2017|access-date=7 March 2017}}</ref>
 
 
== संदर्भ ==
== संदर्भ ==



Revision as of 14:50, 17 March 2023

C++14, C++ प्रोग्रामिंग भाषा के लिए आईएसओ/आईइसी मानक का संस्करण है। इसका उद्देश्य C++11 पर कम विस्तार होना है, जिसमे मुख्य प्रकार से बग फिक्स और छोटे सुधार सम्मिलित हैं, और इसे C++17 द्वारा प्रतिस्थापित किया गया था। इसकी स्वीकृति की घोषणा 18 अगस्त 2014 को की गई थी। C++14 को दिसंबर 2014 में आईएसओ/आईइसी के रूप में प्रकाशित किया गया था, क्योंकि पहले C++ मानक संशोधनों में काफी देर हो चुकी थी, C++1वाई मानक को कभी-कभी इसके संशोधनों तक का उपयोग किया जाता था, इसी प्रकार C++11 मानक को C++0एक्स कहा जाता था, इसके रिलीज की अपेक्षा के साथ 2010 से पहले था (चूँकि वास्तव में यह 2010 और अंत में 2011 में

नई भाषा सुविधाएँ

ये C++14 की मुख्य भाषा में जोड़े गए फीचर हैं।

फंक्शन रिटर्न टाइप परिणाम

C++11 ने लैम्ब्डा फंक्शन को रिटर्न स्टेटमेंट को दिए गए एक्सप्रेशन के प्रकार के आधार पर रिटर्न टाइप निकलने की अनुमति दी है। C++14 सभी फंक्शन के लिए यह क्षमता प्रदान करता है। इन सुविधाओं को लैम्ब्डा फंक्शन तक विस्तारित करता है जो उन फंक्शन के लिए रिटर्न टाइप की परिणाम की अनुमति देता है,रिटर्न एक्सप्रेशन जो फॉर्म के नहीं हैं।

रिटर्न प्रकार के परिणाम को प्रेरित करने के लिए, फंक्शन को ऑटो रिटर्न प्रकार के साथ घोषित किया जाना चाहिए, परन्तु C++11 पिछले रिटर्न प्रकार विनिर्देशक के बिना:

ऑटो रिटर्न प्रकार परिणाम () ; // रिटर्न प्रकार निर्धारित किया जाना चाहिए।

यदि फंक्शन के कार्यान्वन में कई रिटर्न एक्सप्रेशन का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का अनुमान लगाना चाहिए।

उनके रिटर्न प्रकार को निकलने वाले फंक्शन्स को आगे घोषित किया जा सकता है, परन्तु जब तक उन्हें परिभाषित नहीं किया जाता है तब तक उनका उपयोग नहीं किया जा सकता है। उनकी परिभाषाएं उनका उपयोग करने वाली ट्रांसलेशन यूनिट के लिए उपलब्ध होनी चाहिए।

इस प्रकार के फंक्शन के साथ रिकर्सन का उपयोग किया जा सकता है, परन्तु फंक्शन की परिभाषा में कम से कम रिटर्न स्टेटमेंट का बाद पुनरावर्ती कॉल होना चाहिए:

अल्टरनेट टाइप डिडक्शन पर डिक्लिरिएशन

C++11 में, टाइप डिडक्शन के दो प्रकार जोड़े गए थे। ऑटो दी गई एक्सप्रेशन के आधार पर उपयुक्त प्रकार का वेरिएबल बनाने का युक्ति था। डेसिअलटाइप दी गई एक्सप्रेशन के प्रकार की गणना करने का युक्ति था। चूँकि, डेसिअलटाइप और ऑटो टाइप अलग-अलग प्रकार से निकालते हैं। विशेष प्रकार से, ऑटो निरंतर नॉन-रेफरेंस टाइप का अनुमान लगाता है, जैसे कि उपयोग करके एसटीडी::डीके, जबकि ऑटो&& अधिकतर रेफरेन्स निकालता है। चूँकि, डेसिअलटाइप एक्सप्रेशन वैल्यू श्रेणी और एक्सप्रेशन की प्रकृति के आधार पर रेफरेन्स या नॉन-रेफरेन्स टाइप को कम करने के लिए प्रेरित किया जा सकता है:[1][2]

आईएनटी  आई;

आईएनटी&& एफ ();

ऑटो                        एक्स3ए=आई;       // डेसिअलटाइप (एक्स3ए) है आईएनटी

डेसिअलटाइप (आई)   एक्स3डी=आई;      // डेसिअलटाइप (एक्स3डी) है आईएनटी

ऑटो                        एक्स4ए=(आई);     // डेसिअलटाइप (एक्स4ए)  है आईएनटी

डेसिअलटाइप ((आई)) एक्स4डी=(आई);   // डेसिअलटाइप (एक्स4डी) है आईएनटी  

ऑटो                         एक्स5ए=एफ();     // डेसिअलटाइप (एक्स5ए) है आईएनटी

डेसिअलटाइप (एफ())  एक्स5डी=एफ();   // डेसिअलटाइप (एक्स5डी) है आईएनटी     

C++ 14 जोड़ता है डेसिअलटाइप (ऑटो) सिंटैक्स (