C++14: Difference between revisions

From Vigyanwiki
No edit summary
 
(47 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{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}}
सी[[C++|++]]14, सी++ प्रोग्रामिंग भाषा के मानकीकरण के लिए अंतर्राष्ट्रीय संगठन/अंतर्राष्ट्रीय [[इंटरनेशनल इलेक्ट्रोटेक्नीकल कमीशन]] मानक का संस्करण है। इसका उद्देश्य सी[[C++11|++11]] पर कम विस्तार होना है, जिसमें मुख्य प्रकार से बग फिक्स और छोटे सुधार सम्मिलित हैं, और इसे सी[[C++17|++17]] द्वारा प्रतिस्थापित किया गया था। इसकी स्वीकृति की घोषणा 18 अगस्त 2014 को की गई थी।<ref>{{Citation |title=We have C++14! |first=Herb |last=Sutter |date=August 18, 2014 |url=https://isocpp.org/blog/2014/08/we-have-cpp14 |access-date=2014-08-18}}</ref> सी++14 को दिसंबर 2014 में आईएसओ/आईइसी 14882:2014 के रूप में प्रकाशित किया गया था।<ref>{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/06/40/64029.html|title=ISO/IEC 14882:2014|website=ISO}}</ref> क्योंकि पहले के सी++ मानक संशोधनों में काफी देर हो चुकी थी, सी++1वाई नाम का उपयोग कभी-कभी इसके अनुमति तक किया जाता था, इसी प्रकार सी++11 मानक को 2010 से पहले इसकी रिलीज की अपेक्षा के साथ सी++ 0एक्स कहा जाता था (चूँकि वास्तव में यह 2010 और अंत में 2011 में स्खलित हो गया)।


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


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


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


सी++11 ने रिटर्न कथन को दिए गए अभिव्यक्ति के प्रकार के आधार पर रिटर्न प्रकार को निकालने के लिए [[लैम्ब्डा फ़ंक्शन (कंप्यूटर प्रोग्रामिंग)]] की अनुमति दी है। सी++14 सभी कार्यों के लिए यह क्षमता प्रदान करता है। यह इन सुविधाओं को लैम्ब्डा कार्यों तक विस्तारित करता है, जो उन कार्यों के लिए रिटर्न प्रकार की परिणाम  की अनुमति देता है जो रिटर्न अभिव्यक्ति नहीं बनाते हैं। <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> रिटर्न प्रकार के परिणाम को प्रेरित करने के लिए, फ़ंक्शन को घोषित ऑटो वापसी प्रकार के रूप में घोषित किया जाना चाहिए, परन्तु सी ++ 11 में अनुगामी रिटर्न प्रकार विनिर्देशक के बिना है:
<syntaxhighlight lang="cpp">
auto DeduceReturnType();  // रिटर्न प्रकार निर्धारित किया जाना चाहिए।
</syntaxhighlight>
यदि फंक्शन के कार्यान्वन में कई रिटर्न एक्सप्रेशन का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का अनुमान लगाना चाहिए।


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


यदि  कार्यों  के कार्यान्वयन में कई रिटर्न अभिव्यक्ति का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का अनुमान लगाना चाहिए।<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> उनके रिटर्न प्रकार को निकालने वाले कार्यों को आगे घोषित किया जा सकता है, परन्तु जब तक उन्हें परिभाषित नहीं किया जाता तब तक उनका उपयोग नहीं किया जा सकता है। उनकी परिभाषाएँ उनका उपयोग करने वाली अनुवाद इकाई के लिए उपलब्ध होनी चाहिए।
इस प्रकार के फंक्शन के साथ रिकर्सन का उपयोग किया जा सकता है, परन्तु फंक्शन की परिभाषा में कम से कम रिटर्न स्टेटमेंट का बाद पुनरावर्ती कॉल होना चाहिए:


इस प्रकार के कार्य के साथ [[प्रत्यावर्तन]] का उपयोग किया जा सकता है, परन्तु कार्य की परिभाषा में कम से कम रिटर्न कथन के बाद पुनरावर्ती कॉल होना चाहिए:<ref name=deduce />
<syntaxhighlight lang="cpp">
auto Correct(int i)
{
  if (i == 1)
    return i;            // return type deduced as int


ऑटो सही (आईएनटी आई)
  return Correct(i-1)+i;  // ok to call it now
}
 
auto Wrong(int i)
{
{
  यदि (आई==1)
  if (i != 1)
      रिटर्न आई; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है। 
    return Wrong(i-1)+i; // Too soon to call this. No prior return statement.


  रिटर्न सही (आई-1)+आई; // ठीक है इसे अभी कॉल करें
  return i;               // return type deduced as int
}
}
</syntaxhighlight>


ऑटो गलत (आईएनटी आई) {
  यदि (आई! = 1)
    रिटर्न गलत (आई-1)+आई; // इसे कॉल करना बहुत तेजी होगा। कोई पूर्व रिटर्न कथन नहीं है।


  रिटर्न आई; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है। 
}


=== घोषणा पर वैकल्पिक प्रकार की कटौती ===


सी++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 />


आईएनटी  आई;
=== अल्टरनेट टाइप डिडक्शन पर डिक्लिरिएशन  ===


आईएनटी&& एफ ();
C++11 में, टाइप डिडक्शन के दो प्रकार जोड़े गए थे। auto दी गई एक्सप्रेशन के आधार पर उपयुक्त प्रकार का वेरिएबल बनाने का युक्ति था। decltype दी गई एक्सप्रेशन के प्रकार की गणना करने का युक्ति था। चूँकि, decltype और auto टाइप अलग-अलग प्रकार से निकालते हैं। विशेष प्रकार से, auto निरंतर नॉन-रेफरेंस टाइप का अनुमान लगाता है, जैसे कि उपयोग करके std : : decay, जबकि auto&& अधिकतर रेफरेन्स निकालता है। चूँकि, decltype एक्सप्रेशन वैल्यू श्रेणी और एक्सप्रेशन की प्रकृति के आधार पर रेफरेन्स या नॉन-रेफरेन्स टाइप को कम करने के लिए प्रेरित किया जा सकता है:<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>


ऑटो                        एक्स3ए=आई;       // डेसिअलटाइप (एक्स3ए) है आईएनटी
<syntaxhighlight lang="cpp">
int  i;
int&& f();
auto          x3a = i;    // decltype(x3a) is int
decltype(i)  x3d = i;    // decltype(x3d) is int
auto          x4a = (i);  // decltype(x4a) is int
decltype((i)) x4d = (i);  // decltype(x4d) is int&
auto          x5a = f();  // decltype(x5a) is int
decltype(f()) x5d = f();   // decltype(x5d) is int&&
</syntaxhighlight> 


डेसिअलटाइप (आई)   एक्स3डी=आई;      // डेसिअलटाइप (एक्स3डी) है आईएनटी
C++ 14 जोड़ता है <code>decltype(auto)</code> सिंटैक्स (वाक्य-रचना) है। यह स्वतः घोषणाओं को <code>auto</code> एक्सप्रेशन पर <code>decltype</code> नियमों का उपयोग करने की अनुमति देता है।


ऑटो                        एक्स4ए=(आई);     // डेसिअलटाइप (एक्स4ए)  है आईएनटी
<code>decltype(auto)</code> सिंटैक्स (वाक्य-रचना) का उपयोग फंक्शन रिटर्न टाइप परिणाम के साथ भी किया जा सकता है <code>decltype(auto)</code> इसके विपरीत सिंटैक्स (वाक्य-रचना) <code>auto</code> फंक्शन के रिटर्न टाइप की परिणाम के लिए है।<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>


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


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


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


सी ++ 14 जोड़ता है डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) है। यह स्वतः घोषणाओं को ऑटो अभिव्यक्ति पर डेसिअलटाइप नियमों का उपयोग करने की अनुमति देता है। डेसिअलटाइप (ऑटो) सिंटैक्स (वाक्य-रचना) का उपयोग कार्य रिटर्न टाइप परिणाम के साथ भी किया जा सकता है डेसिअलटाइप (ऑटो) इसके  विपरीत सिंटैक्स (वाक्य-रचना) ऑटो कार्यों के रिटर्न प्रकार की परिणाम के लिए है।<ref name="deduce" />






=== रिलैक्स्ड कॉन्स्टेक्स प्रतिबंध ===


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


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


* को छोड़कर कोई भी घोषणा:
* को छोड़कर कोई भी घोषणा:
** स्टैटिक या थ्रेड लोकल परिणाम है।
** <code>static</code> या <code>thread_local</code>वेरिएबल है।
** प्रारंभिक के अतिरिक्त परिवर्तनीय घोषणाएं है।
** प्रारंभिक के अतिरिक्त वेरिएबल डेक्लीरियेसंस है।
* यदि सशर्त ब्रांचिंग कथन और स्विच है।
* यदि सशर्त ब्रांचिंग स्टेटमेंट <code>if</code> और <code>switch</code> है।
* रेंज-आधारित युक्त कोई भी लूपिंग कथन के लिए है ।  
* रेंज-आधारित युक्त कोई भी लूपिंग स्टेटमेंट <code>for</code> है ।
* अभिव्यक्तियाँ जो किसी वस्तु के मूल्य को बदल देती हैं यदि उस वस्तु का जीवनकाल स्थिर अभिव्यक्ति कार्यों के अंतर्गत प्रारम्भ होता है। इसमें किसी भी गैर-स्थिरांक कॉन्सटेक्सपर-घोषित गैर-स्थैतिक सदस्य कार्य होता है।
* एक्सप्रेशंस जो किसी ऑब्जेक्ट के वैल्यू को बदल देती हैं यदि उस ऑब्जेक्ट का लाइफटाइम (जीवनकाल) कांस्टेंट एक्सप्रेशन फंक्शन के अंतर्गत प्रारम्भ होता है। इसमें किसी भी नॉन-<code>const</code> <code>constexpr</code>-डिक्लियर्ड नॉन-स्टैटिक मेंबर फंक्शन होता है।
 
गोटो C++ 14 रिलैक्स्ड से कॉन्सटेक्सपर-डिक्लियर्ड फंक्शन में स्टेटमेंट प्रतिबंधित हैं।
 
साथ ही C++11 ने कहा कि सभी नॉन-स्टैटिक फंक्शन <code>constexpr</code> भी स्पष्ट प्रकार से डिक्लियर्ड किए गए थे, इस संबंध में भी स्पष्ट प्रकार से डिक्लियर्ड कॉन्स्ट थेl वह तब से हटा दिया गया है; नॉन-स्टैटिक मेंबर फंक्शन नॉन-<code>const</code> हो सकते हैं। <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> चूँकि, उपरोक्त  रेस्ट्रिक्शन के अनुकूल, नॉन-<code>const</code>  <code>constexpr</code> मेंबर फंक्शन मात्र एक वर्ग मेंबर को संशोधित कर सकता है यदि उस ऑब्जेक्ट का लाइफटाइम निरंतर एक्सप्रेशन इवैल्यूएशन के अंतर्गत प्रारम्भ हुआ हो।


गोटो सी ++ 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++ के पूर्व संस्करणों में, मात्र फंक्शन, क्लासेस या टाइप उपनामों को टेम्पलेट किया जा सकता है। C++14 टेम्पलेटेड वेरिएबल के निर्माण की अनुमति देता है। प्रस्ताव में दिया गया उदाहरण वेरिएबल है | <code>pi</code>जिसे विभिन्न प्रकारों के लिए पाई का मान प्राप्त करने के लिए पढ़ा जा सकता है (जैसे, 3 जब अभिन्न प्रकार के रूप में पढ़ा जाता है; के साथ संभव निकटतम मूल्य <code>float</code>, <code>double</code> या <code>long double</code> उपयुक्त जब प्रकार में पढ़ने पर <code>float</code>, <code>double</code> या <code>long double</code>, इत्यादि है)।


=== चर टेम्पलेट्स ===
विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम क्रियान्वित होते हैं।<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>


सी ++ के पूर्व संस्करणों में, मात्र कार्य, क्लासेस या टाइप उपनामों को टेम्पलेट किया जा सकता है। सी++14 टेम्पलेटेड परिवर्तन के निर्माण की अनुमति देता है। प्रस्ताव में दिया गया उदाहरण परिवर्तन है पीआई जिसे विभिन्न प्रकारों के लिए पाई का मान प्राप्त करने के लिए पढ़ा जा सकता है (जैसे, 3 जब एक अभिन्न प्रकार के रूप में पढ़ा जाता है; के साथ संभव निकटतम मूल्य <code>float</code>, <code>double</code> या <code>long double</code> सटीक जब के रूप में पढ़ा <code>float</code>, <code>double</code> या <code>long double</code>, क्रमश; वगैरह।)।
<syntaxhighlight lang="cpp">
template<typename T>
constexpr T pi = T(3.141592653589793238462643383);


विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम लागू होते हैं।<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>
// Usual specialization rules apply:
<वाक्यविन्यास लैंग = सीपीपी>
template<>
टेम्पलेट <टाइपनेम टी>
constexpr const char* pi<const char*> = "pi";
constexpr टी पाई = टी (3.141592653589793238462643383);
</syntaxhighlight>


// सामान्य विशेषज्ञता नियम लागू होते हैं:
टेम्पलेट <>
constexpr const char* pi<const char*> = pi;
</वाक्यविन्यास हाइलाइट>


=== सकल सदस्य आरंभीकरण ===


सी ++ 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++ 11 ने मेंबर प्रारंभकर्ता जोड़े, यदि कोई निर्माता मेंबर को स्वयं प्रारंभ नहीं करता है तो क्लास के स्कोप में मेंबर्स पर क्रियान्वित होने वाले एक्सप्रेशन हैं। मेंबर  प्रारंभकर्ताओं के साथ किसी भी वर्ग को स्पष्ट प्रकार से बाहर करने के लिए समुच्चय की परिभाषा बदल दी गई थी; इसलिए, उन्हें कुल आरंभीकरण का उपयोग करने की अनुमति नहीं है।
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 />सिंटैक्स उपसर्गों का उपयोग करता है <code>0b</code> या <code>0B</code>. सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदा। [[जावा (प्रोग्रामिंग भाषा)]], सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी #, [[स्विफ्ट (प्रोग्रामिंग भाषा)]], [[जाओ (प्रोग्रामिंग भाषा)]], [[स्काला (प्रोग्रामिंग भाषा)]], [[रूबी (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग लैंग्वेज), [[OCaml]], और एक के रूप में कम से कम 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>
C ++ 14 में संख्यात्मक अक्षर [[बाइनरी संख्या]] में निर्दिष्ट किए जा सकते हैं।<ref name=wong1 /> सिंटैक्स उपसर्गों <code>0b</code> या<code>0B</code> का उपयोग करते हैं। सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदाहरण [[जावा (प्रोग्रामिंग भाषा)|Java]], C#, [[स्विफ्ट (प्रोग्रामिंग भाषा)|Swift]], [[जाओ (प्रोग्रामिंग भाषा)|Go]], [[स्काला (प्रोग्रामिंग भाषा)|Scala]], [[रूबी (प्रोग्रामिंग भाषा)|Ruby]], Python, OCaml, और कम से कम 2007 से कुछ C कंपाइलर्स में अनौपचारिक विस्तार के रूप में हुआ है।<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>
=== अंक विभाजक ===
 
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> यह मानव पाठकों के लिए सबटाइजिंग के माध्यम से बड़ी संख्या को पार्स करना सरल बना सकता है।
 
<syntaxhighlight lang="cpp">
auto integer_literal = 1'000'000;
auto floating_point_literal = 0.000'015'3;
auto binary_literal = 0b0100'1100'0110;
auto a_dozen_crores = 12'00'00'000;
</syntaxhighlight>
 
 
 
 
 
 
 




=== अंक विभाजक ===


सी ++ 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;
ऑटो फ्लोटिंग_पॉइंट_लिटरल = 0.000'015'3;
ऑटो बाइनरी_लिटरल = 0b0100'1100'0110;
ऑटो a_dozen_crores = 12'00'00'000;
</वाक्यविन्यास हाइलाइट>


=== सामान्य लैम्ब्डा ===
=== सामान्य लैम्ब्डा ===


सी ++ 11 में, अज्ञात फ़ंक्शन पैरामीटर को ठोस प्रकारों के साथ घोषित करने की आवश्यकता है। सी ++ 14 इस आवश्यकता को आराम देता है, जिससे लैम्ब्डा फ़ंक्शन पैरामीटर को घोषित किया जा सकता है <code>auto</code> प्रकार विनिर्देशक।<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 में, लैम्ब्डा फंक्शन पैरामीटर को ठोस प्रकारों के साथ डिक्लियर्ड करने की आवश्यकता है। C ++ 14 इस आवश्यकता को रिलैक्स्ड देता है, जिससे लैम्ब्डा   फंक्शन पैरामीटर को <code>auto</code> टाइप विनिर्देशक के साथ डिक्लियर्ड करने की अनुमति देता है। <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>  
<वाक्यविन्यास लैंग = सीपीपी>
ऑटो लैम्ब्डा = [] (ऑटो एक्स, ऑटो वाई) {रिटर्न एक्स + वाई;};
</वाक्यविन्यास हाइलाइट>


विषय में <code>auto</code> प्रकार की कटौती, सामान्य लैम्ब्डा टेम्पलेट तर्क कटौती के नियमों का पालन करते हैं (जो समान हैं, लेकिन सभी मामलों में समान नहीं हैं{{Clarify|reason=Similar to what?  Either it follows the rules for template type deduction or it doesn't.  Do we mean "it follows rules similar to those for template type deduction?"|date=October 2019}}). उपरोक्त कोड इसके बराबर है:<ref>{{cite web|title=N3649 Generic (Polymorphic) Lambda Expressions (Revision 3)|first1=Faisal|last1=Vali|first2=Herb|last2=Sutter|first3=Dave|last3=Abrahams|date=19 April 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3649.html}}</ref>
<syntaxhighlight lang="cpp">
<वाक्यविन्यास लैंग = सीपीपी>
auto lambda = [](auto x, auto y) {return x + y;};
</syntaxhighlight>
 
विषय में <code>auto</code> टाइप की डिडक्शन, सामान्य लैम्ब्डा टेम्पलेट तर्क डिडक्शन के नियमों का पालन करते हैं (जो समान हैं, परन्तु सभी कारणों में समान नहीं हैं). उपरोक्त कोड इसके बराबर है:  
 
<syntaxhighlight lang="cpp">
struct
struct
{
{
   टेम्पलेट <टाइपनाम टी, टाइपनाम यू>
   template<typename T, typename U>
     ऑटो ऑपरेटर () (टी एक्स, यू वाई) कास्ट {रिटर्न एक्स + वाई;}
     auto operator()(T x, U y) const {return x + y;}
} लैम्ब्डा {};
} lambda{};
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
 
सामान्य लैम्ब्डा अनिवार्य प्रकार से टेम्पलेटेड फ़ैक्टर लैम्ब्डा हैं।
 
 
 
 
 
 
 
 
 
 


सामान्य लैम्ब्डा अनिवार्य रूप से टेम्पलेटेड फ़ैक्टर लैम्ब्डा हैं।


=== लैम्ब्डा कैप्चर एक्सप्रेशंस ===
=== लैम्ब्डा कैप्चर एक्सप्रेशंस ===


सी++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/>


यह प्रारंभिक अभिव्यक्ति के उपयोग के माध्यम से किया जाता है:
यह इनिसीअलाइज़र एक्सप्रेशन के उपयोग के माध्यम से किया जाता है:


<वाक्यविन्यास लैंग = सीपीपी>
<syntaxhighlight lang="cpp">
ऑटो लैम्ब्डा = [मूल्य = 1] {वापसी मूल्य;};
auto lambda = [value = 1] {return value;};
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


लैम्ब्डा समारोह <code>lambda</code> रिटर्न 1, जो क्या है <code>value</code> के साथ प्रारंभ किया गया था। घोषित कैप्चर प्रारंभकर्ता अभिव्यक्ति से प्रकार को कम करता है जैसे कि द्वारा <code>auto</code>.
लैम्ब्डा फंक्शन <code>lambda</code> रिटर्न 1, वह <code>value</code> जिसके साथ प्रारंभ किया गया था। डिक्लियर्ड कैप्चर इनिसीअलाइज़र एक्सप्रेशन से प्रकार को कम करता है जैसे कि <code>auto</code> द्वारा किया जाता है।  


यह मानक के उपयोग के माध्यम से चाल से कब्जा करने के लिए इस्तेमाल किया जा सकता है <code>std::move</code> समारोह:
यह मानक के उपयोग के माध्यम के मूव से कैप्चर करने के लिए उपयोग किया जा सकता है <code>std::move</code> फंक्शन है:
<syntaxhighlight lang="cpp">
std::unique_ptr<int> ptr(new int(10));
auto lambda = [value = std::move(ptr)] {return *value;};
</syntaxhighlight>


<वाक्यविन्यास लैंग = सीपीपी>
<code>deprecated</code> विशेषता इकाई को <code>deprecated</code> करने की अनुमति देती है, जो इसे अभी भी उपयोग करने के लिए लीगल बनाती है परन्तु उपयोगकर्ताओं को यह नोटिस देती है कि उपयोग को रोकने का प्रयास किया जाता है और संकलन के दौरान चेतावनी संदेश मुद्रित किया जा सकता है। <code>deprecated</code> वैकल्पिक स्ट्रिंग शाब्दिक के तर्क के रूप में प्रकट हो सकता है, <code>deprecated</code> के योग्यता की व्याख्या करने और प्रतिस्थापन का सुझाव देने के लिए होता है।
std::unique_ptr<int> ptr(new int(10));
ऑटो लैम्ब्डा = [मूल्य = एसटीडी :: चाल (पीटीआर)] {वापसी * ​​मूल्य;};
</वाक्यविन्यास हाइलाइट>


=== विशेषता <code><nowiki>[[deprecated]]</nowiki></code>=== <code>deprecated</code> ई> विशेषता एक इकाई को [[पदावनत]] करने की अनुमति देती है, जो इसे अभी भी उपयोग करने के लिए कानूनी बनाती है लेकिन उपयोगकर्ताओं को यह नोटिस देती है कि उपयोग को हतोत्साहित किया जाता है और संकलन के दौरान एक चेतावनी संदेश मुद्रित किया जा सकता है। एक वैकल्पिक स्ट्रिंग शाब्दिक के तर्क के रूप में प्रकट हो सकता है <code>deprecated</code>, पदावनति के औचित्य की व्याख्या करने और प्रतिस्थापन का सुझाव देने के लिए।
<syntaxhighlight lang="cpp">
<वाक्यविन्यास लैंग = सीपीपी>
[[deprecated]] int f();
बहिष्कृत int f();


पदावनत (g() थ्रेड-असुरक्षित है। इसके बजाय h() का उपयोग करें)
[[deprecated("g() is thread-unsafe. Use h() instead")]]
शून्य जी (इंट एंड एक्स);
void g( int& x );


शून्य एच (इंट एंड एक्स);
void h( int& x );


शून्य परीक्षण ()
void test()
{
{
   इंट ए = एफ (); // चेतावनी: 'एफ' बहिष्कृत है
   int a = f(); // warning: 'f' is deprecated
   जी (); // चेतावनी: 'जी' बहिष्कृत है: जी() थ्रेड-असुरक्षित है। इसके बजाय एच() का प्रयोग करें
   g(a); // warning: 'g' is deprecated: g() is thread-unsafe. Use h() instead
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
 
 


== नई मानक पुस्तकालय सुविधाएँ ==


=== साझा म्यूटेक्स और लॉकिंग ===


सी ++ 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>




=== साहचर्य कंटेनरों में विषम लुकअप ===


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


सी ++ 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> यह एक मानचित्र की अनुमति देगा <code>std::string</code> ए के खिलाफ तुलना करने के लिए कुछ मूल्य <code>const char*</code> या कोई अन्य प्रकार जिसके लिए a <code>operator< </code> अधिभार उपलब्ध है। यह a में समग्र वस्तुओं को अनुक्रमित करने के लिए भी उपयोगी है <code>std::set</code> उपयोगकर्ता को मजबूर किए बिना एकल सदस्य के मूल्य से <code>find</code> एक डमी वस्तु बनाने के लिए (उदाहरण के लिए एक संपूर्ण बनाना <code>struct Person</code> नाम से किसी व्यक्ति को खोजने के लिए)।


पिछली संगतता को बनाए रखने के लिए, विषम लुकअप की अनुमति मात्र तभी दी जाती है जब साहचर्य कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। मानक पुस्तकालय कक्षाएं <code>std::less<></code> और <code>std::greater<></code> विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।<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"/>
=== शेयर्ड म्यूटेक्स और लॉकिंग ===


* एस, विभिन्न बनाने के लिए <code>std::basic_string</code> प्रकार।
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>
* एच, मिनट, एस, एमएस, यूएस, एनएस, संबंधित बनाने के लिए <code>std::chrono::duration</code> समय अंतराल।
=== अस्सोसिएटिव कंटेनरों में विषम लुकअप ===
* if , i , il , संबंधित बनाने के लिए <code>std::complex<float></code>, <code>std::complex<double></code> और <code>std::complex<long double></code> काल्पनिक संख्या।


<वाक्यविन्यास लैंग = सीपीपी>
C [[सी ++ मानक पुस्तकालय|++ स्टैण्डर्ड लाइब्रेरी]] चार सहयोगी कंटेनर वर्गों को परिभाषित करता है। ये वर्ग उपयोगकर्ता को उस प्रकार के वैल्यू के आधार पर वैल्यू देखने की अनुमति देते हैं। मैप कंटेनर उपयोगकर्ता को कुंजी और मान निर्दिष्ट करने की अनुमति देता है, जहां कुंजी द्वारा लुकअप किया जाता है और मान देता है। चूँकि, लुकअप निरंतर  विशिष्ट कुंजी प्रकार द्वारा किया जाता है, भले ही वह मानचित्र की तरह कुंजी हो या समूह के रूप में स्वयं मान हो।
ऑटो स्ट्र = हैलो वर्ल्ड एस; // ऑटो स्ट्रिंग घटाता है
ऑटो ड्यूर = 60s; // ऑटो क्रोनो :: सेकेंड घटाता है
ऑटो जेड = 1i; // ऑटो जटिल <डबल> घटाता है
</वाक्यविन्यास हाइलाइट>


दो एस शाब्दिक बातचीत नहीं करते हैं, क्योंकि स्ट्रिंग मात्र स्ट्रिंग अक्षर पर चलती है, और सेकेंड के लिए मात्र संख्याओं पर ही चलती है।<ref>{{cite web|title=N3642 User-defined Literals for Standard Library Types (part 1 - version 4)|first=Peter|last=Sommerlad|date=18 April 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3642.pdf}}</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> यह मानचित्र की अनुमति देगा <code>std::string</code> के विरुद्ध समान करने के लिए कुछ मूल्य <code>const char*</code> या कोई अन्य प्रकार जिसके लिए operator< ऑपरेटर ओवरलोड उपलब्ध है। यह डमी ऑब्जेक्ट बनाने के लिए खोज के उपयोगकर्ता को परेशान किये बिना मेंबर के वैल्यू द्वारा <code>std::set</code> में समग्र ऑब्जेक्ट्स को अनुक्रमणित करने के लिए भी उपयोगी है (उदाहरण के लिए किसी व्यक्ति को नाम से ढूंढने के लिए <code>struct Person</code> की संरचना बनाना)।


बैकवर्ड कम्पैटिबिलिटी को बनाए रखने के लिए, विषम लुकअप की अनुमति मात्र तभी दी जाती है जब अस्सोसिएटिव कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। स्टैण्डर्ड लाइब्रेरी क्लासेज <code>std::less<></code>और <code>std::greater<></code> विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।<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>
=== स्टैण्डर्ड उपयोगकर्ता परिभाषित लिटरल ===


=== टाइप === के माध्यम से टपल एड्रेसिंग <code>std::tuple</code> ई> सी ++ 11 में पेश किया गया प्रकार टाइप किए गए मानों को एक संकलन-समय निरंतर पूर्णांक द्वारा अनुक्रमित करने की अनुमति देता है। सी ++ 14 इसे इंडेक्स के बजाय टाइप द्वारा टपल से लाने की अनुमति देने के लिए विस्तारित करता है।<ref name="wong2"/>यदि टपल में एक से अधिक प्रकार के तत्व हैं, तो एक संकलन-समय त्रुटि परिणाम:<ref>{{cite web|title=N3670 Wording for Addressing Tuples by Type: Revision 2|date=19 April 2013|last=Spertus|first=Mike|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3670.html}}</ref>
C++ 11 ने उपयोगकर्ता परिभाषित लिटरल प्रत्यय के लिए सिंटैक्स को परिभाषित किया, परन्तु स्टैण्डर्ड लाइब्रेरी ने उनमें से किसी का भी उपयोग नहीं किया गया है। C++14 निम्नलिखित स्टैण्डर्ड अक्षर जोड़ता है:<ref name="wong2"/>
<वाक्यविन्यास लैंग = सीपीपी>
टपल <स्ट्रिंग, स्ट्रिंग, इंट> टी (फू, बार, 7);
int i = get<int>(t); // मैं == 7
int j = get<2>(t); // पहले जैसा: j == 7
स्ट्रिंग एस = <स्ट्रिंग> (टी) प्राप्त करें; // अस्पष्टता के कारण संकलन-समय त्रुटि
</वाक्यविन्यास हाइलाइट>


=== छोटी पुस्तकालय सुविधाएँ ===
* "s", विभिन्न बनाने के लिए <code>std::basic_string</code> टाइप है।
* "h", "min", "s", "ms", "us", "ns" संबंधित बनाने के लिए <code>std::chrono::duration</code> समय अंतराल है।
* "if", "i", "il", संबंधित बनाने के लिए <code>std::complex<float></code>, <code>std::complex<double></code> और <code>std::complex<long double></code> काल्पनिक संख्या है।


<code>std::make_unique</code> जैसे प्रयोग कर सकते हैं <code>std::make_shared</code> के लिए <code>std::unique_ptr</code> वस्तुओं।<ref name=isocpp/>
<syntaxhighlight lang="cpp">
auto str = "hello world"s; // auto deduces string
auto dur = 60s;            // auto deduces chrono::seconds
auto z  = 1i;            // auto deduces complex<double>
</syntaxhighlight>


<code>std::integral_constant</code> एक प्राप्त किया <code>operator()</code> अधिभार निरंतर मान वापस करने के लिए।<ref name=wong2/>
[https://en.wikipedia.org/w/index.php?title=C%2B%2B14&section=15&veaction=editsource edit source]दो एस शाब्दिक बातचीत नहीं करते हैं, क्योंकि स्ट्रिंग मात्र स्ट्रिंग अक्षर पर चलती है, और सेकेंड के लिए मात्र संख्याओं पर ही चलती है।<ref>{{cite web|title=N3642 User-defined Literals for Standard Library Types (part 1 - version 4)|first=Peter|last=Sommerlad|date=18 April 2013|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3642.pdf}}</ref>


वर्ग टेम्पलेट <code>std::integer_sequence</code> और संबंधित उपनाम टेम्पलेट संकलन-समय पूर्णांक अनुक्रमों का प्रतिनिधित्व करने के लिए जोड़े गए थे, जैसे पैरामीटर पैक में तत्वों के सूचकांक।<ref name=intseqs>{{cite web | title=N3658 Compile-time integer sequences | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3658.html |last=Wakely|first=Jonathan|date=18 April 2013|access-date=5 January 2016}}</ref>
'''टाइप के माध्यम से टपल एड्रेसिंग'''
वैश्विक <code>std::begin</code>/<code>std::end</code> कार्यों को बढ़ाया गया <code>std::cbegin</code>/<code>std::cend</code> कार्य, जो निरंतर पुनरावर्तक लौटाते हैं, और <code>std::rbegin</code>/<code>std::rend</code> और <code>std::crbegin</code>/<code>std::crend</code> जो रिवर्स इटरेटर लौटाते हैं। <code>std::exchange</code> e> फ़ंक्शन टेम्प्लेट एक चर के लिए एक नया मान निर्दिष्ट करता है और पुराना मान लौटाता है।<ref name=exchange>{{cite web | title=N3668 exchange() utility function, revision 3 | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3668.html |first=Jeffrey|last=Yasskin|date=19 April 2013|access-date=5 January 2016}}</ref>
के नए अधिभार <code>std::equal</code>, <code>std::mismatch</code>, और <code>std::is_permutation</code> दूसरी श्रेणी के लिए पुनरावृत्तियों की एक जोड़ी लें, ताकि कॉलर को अलग से यह जांचने की आवश्यकता न हो कि दो श्रेणियां समान लंबाई की हैं।<ref name=robustseqs>{{cite web | title=N3671 Making non-modifying sequence operations more robust: Revision 2 | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3671.html |last1=Spertus|first1=Mike|last2=Pall|first2=Attila|date=19 April 2013|access-date=5 January 2016}}</ref>


<code>std::is_final</code> ई> टाइप विशेषता यह पता लगाती है कि कोई वर्ग चिह्नित है या नहीं <code>final</code>. <code>std::quoted</code> ई> स्ट्रीम I/O मैनिपुलेटर आउटपुट पर सीमांकक (दोहरे-उद्धरणों के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड सीमांकक से बचकर, एम्बेडेड रिक्त स्थान के साथ तार डालने और निकालने की अनुमति देता है।<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>
<code>std::tuple</code> में प्रस्तुत प्रकार संकलित-समय स्थिर पूर्णांकों द्वारा टाइप किये गए मानों के कुल योग को अनुक्रमित करने की अनुमति देता है। C ++ 14 इसे इंडेक्स के विपरीत टाइप द्वारा टपल से लाने की अनुमति देने के लिए विस्तारित करता है।<ref name="wong2" />यदि टपल में एक से अत्यधिक प्रकार के तत्व हैं, तो संकलन-समय त्रुटि परिणाम होता है:  




== संकलक समर्थन ==
 
[[बजना]] ने 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> GNU कंपाइलर संग्रह ने GCC 5 में सी++14 के लिए समर्थन समाप्त कर दिया, और सी++14 को GCC 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> [[Microsoft Visual Studio]] 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>
<syntaxhighlight lang="cpp">
tuple<string, string, int> t("foo", "bar", 7);
int i = get<int>(t);        // i == 7
int j = get<2>(t);          // Same as before: j == 7
string s = get<string>(t);  // Compile-time error due to ambiguity
</syntaxhighlight>
  '''स्माल लाइब्रेरी आकृति'''
 
 
 
 
 
 
[[index.php?title=Category:Navigational boxes| ]]




== संदर्भ ==


{{reflist|30em}}
[[index.php?title=Category:Template documentation pages|Documentation/doc]]


<code>std::make_unique</code>  जैसे प्रयोग कर सकते हैं <code>std::make_shared</code> के लिए <code>std::unique_ptr</code> ऑब्जेक्ट है।<ref name="isocpp" />


==बाहरी संबंध==
<code>std::integral_constant</code> ओवरलोड निरंतर मान रिटर्न करने के लिए <code>operator()</code> प्राप्त किया है।<ref name="wong2" />
* [https://web.archive.org/web/20150814081653/http://www.drdobbs.com/cpp/the-c14-standard-what-you-need-to-know/240169034 C++14: What you need to know] Overview of features in [[Dr. Dobb's]], 16 Sept. 2014


{{C++ProLang}}
वर्ग टेम्पले <code>std::integer_sequence</code> और संबंधित उपनाम टेम्पलेट संकलन-टाइम इंटीग्रल सीक्वेंस का प्रतिनिधित्व करने के लिए जोड़े गए थे, जैसे पैरामीटर पैक में तत्वों के सूचकांक हैं।<ref name="intseqs">{{cite web | title=N3658 Compile-time integer sequences | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3658.html |last=Wakely|first=Jonathan|date=18 April 2013|access-date=5 January 2016}}</ref> वैश्विक <code>std::rbegin</code>/<code>std::rend</code> फंक्शन को बढ़ाया गया <code>std::crbegin</code>/<code>std::crend</code> फंक्शन, जो निरंतर इटरेटर रिटर्न  हैं, और <code>std::rbegin</code>/<code>std::rend</code> और <code>std::crbegin</code>/<code>std::crend</code>जो रिवर्स इटरेटर रिटर्न हैं। <code>std::exchange</code> फ़ंक्शन टेम्प्लेट वेरिएबल के लिए नया वैल्यू निर्दिष्ट करता है और पुराना वैल्यू रिटर्न करता है।<ref name="exchange">{{cite web | title=N3668 exchange() utility function, revision 3 | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3668.html |first=Jeffrey|last=Yasskin|date=19 April 2013|access-date=5 January 2016}}</ref> नए ओवरलोड <code>std::equal</code>, <code>std::mismatch</code>, और <code>std::is_permutation</code> दूसरी श्रेणी के लिए इरिटेटर की जोड़ी लें, जिससे की कॉलर को अलग से यह जांचने की आवश्यकता न हो कि दो श्रेणियां समान लंबाई की हैं।<ref name="robustseqs">{{cite web | title=N3671 Making non-modifying sequence operations more robust: Revision 2 | url=http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3671.html |last1=Spertus|first1=Mike|last2=Pall|first2=Attila|date=19 April 2013|access-date=5 January 2016}}</ref>
{{ISO standards}}
{{Programming languages}}
[[Category: सी ++]] [[Category: प्रोग्रामिंग भाषा मानकों]] [[Category: C++ कोड उदाहरण के साथ लेख]] [[Category: सी ++ प्रोग्रामिंग भाषा परिवार]] [[Category: आईईसी मानकों]] [[Category: आईएसओ मानक]]


<code>std::is_final</code>टाइप विशेषता यह पता लगाती है कि कोई <code>final</code> वर्ग चिह्नित है या नहीं है।<code>std::quoted</code> स्ट्रीम '''I/O''' मैनिपुलेटर आउटपुट पर डेलीमीटर्स (डबल-कोट के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड डेलीमीटर्स से बचने अनुमति देता है।<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 में 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> GCC 5 में C++14 के लिए सपोर्ट समाप्त कर दिया, और C++14 को GCC 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>
== संदर्भ ==


{{reflist|30em}}
==बाहरी संबंध==
* [https://web.archive.org/web/20150814081653/http://www.drdobbs.com/cpp/the-c14-standard-what-you-need-to-know/240169034 C++14: What you need to know] Overview of features in [[Dr. Dobb's]], 16 Sept. 2014


[[Category: Machine Translated Page]]
[[Category:C++ कोड उदाहरण के साथ लेख]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:आईईसी मानकों]]
[[Category:आईएसओ मानक]]
[[Category:प्रोग्रामिंग भाषा मानकों]]
[[Category:सी ++]]
[[Category:सी ++ प्रोग्रामिंग भाषा परिवार]]

Latest revision as of 17:06, 29 August 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 सभी फंक्शन के लिए यह क्षमता प्रदान करता है। इन सुविधाओं को लैम्ब्डा फंक्शन तक विस्तारित करता है जो उन फंक्शन के लिए रिटर्न टाइप की परिणाम की अनुमति देता है,रिटर्न एक्सप्रेशन जो फॉर्म के नहीं हैं।

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

auto DeduceReturnType();   // रिटर्न प्रकार निर्धारित किया जाना चाहिए।

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

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

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

auto Correct(int i)
{
  if (i == 1)
    return i;             // return type deduced as int

  return Correct(i-1)+i;  // ok to call it now
}

auto Wrong(int i)
{
  if (i != 1)
    return Wrong(i-1)+i;  // Too soon to call this. No prior return statement.

  return i;               // return type deduced as int
}







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

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

int   i;
int&& f();
auto          x3a = i;     // decltype(x3a) is int
decltype(i)   x3d = i;     // decltype(x3d) is int
auto          x4a = (i);   // decltype(x4a) is int
decltype((i)) x4d = (i);   // decltype(x4d) is int&
auto          x5a = f();   // decltype(x5a) is int
decltype(f()) x5d = f();   // decltype(x5d) is int&&

 

C++ 14 जोड़ता है decltype(auto) सिंटैक्स (वाक्य-रचना) है। यह स्वतः घोषणाओं को auto एक्सप्रेशन पर decltype नियमों का उपयोग करने की अनुमति देता है।

decltype(auto) सिंटैक्स (वाक्य-रचना) का उपयोग फंक्शन रिटर्न टाइप परिणाम के साथ भी किया जा सकता है decltype(auto) इसके विपरीत सिंटैक्स (वाक्य-रचना) auto फंक्शन के रिटर्न टाइप की परिणाम के लिए है।[3]







रिलैक्स्ड कॉन्स्टेक्सपर प्रतिबंध

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

C++14 इन रेस्ट्रिक्शन्स (प्रतिबंधों) को रिलेक्स्ड करता है। constexpr- डिक्लियर्ड फंक्शन में अब निम्नलिखित सम्मिलित हो सकते हैं:[2]

  • को छोड़कर कोई भी घोषणा:
    • static या thread_localवेरिएबल है।
    • प्रारंभिक के अतिरिक्त वेरिएबल डेक्लीरियेसंस है।
  • यदि सशर्त ब्रांचिंग स्टेटमेंट if और switch है।
  • रेंज-आधारित युक्त कोई भी लूपिंग स्टेटमेंट for है ।
  • एक्सप्रेशंस जो किसी ऑब्जेक्ट के वैल्यू को बदल देती हैं यदि उस ऑब्जेक्ट का लाइफटाइम (जीवनकाल) कांस्टेंट एक्सप्रेशन फंक्शन के अंतर्गत प्रारम्भ होता है। इसमें किसी भी नॉन-const constexpr-डिक्लियर्ड नॉन-स्टैटिक मेंबर फंक्शन होता है।

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

साथ ही C++11 ने कहा कि सभी नॉन-स्टैटिक फंक्शन constexpr भी स्पष्ट प्रकार से डिक्लियर्ड किए गए थे, इस संबंध में भी स्पष्ट प्रकार से डिक्लियर्ड कॉन्स्ट थेl वह तब से हटा दिया गया है; नॉन-स्टैटिक मेंबर फंक्शन नॉन-const हो सकते हैं। [4] चूँकि, उपरोक्त रेस्ट्रिक्शन के अनुकूल, नॉन-const constexpr मेंबर फंक्शन मात्र एक वर्ग मेंबर को संशोधित कर सकता है यदि उस ऑब्जेक्ट का लाइफटाइम निरंतर एक्सप्रेशन इवैल्यूएशन के अंतर्गत प्रारम्भ हुआ हो।

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

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

विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम क्रियान्वित होते हैं।[5][6]

template<typename T>
constexpr T pi = T(3.141592653589793238462643383);

// Usual specialization rules apply:
template<>
constexpr const char* pi<const char*> = "pi";







ऐग्रीगेट मेंबर इनिसीअलाइजेशन

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

C++14 इस रेस्ट्रिक्शन को रिलेक्स्ड करता है,[2] ऐसे प्रकारों पर कुल आरंभीकरण की अनुमति देना है। यदि ब्रेस्ड इनिट सूची उस तर्क के लिए कोई मान प्रदान नहीं करती है, तो मेंबर प्रारंभकर्ता इसका ध्यान रखता है।[7]

बाइनरी शाब्दिक

C ++ 14 में संख्यात्मक अक्षर बाइनरी संख्या में निर्दिष्ट किए जा सकते हैं।[2] सिंटैक्स उपसर्गों 0b या0B का उपयोग करते हैं। सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदाहरण Java, C#, Swift, Go, Scala, Ruby, Python, OCaml, और कम से कम 2007 से कुछ C कंपाइलर्स में अनौपचारिक विस्तार के रूप में हुआ है।[8]

अंक विभाजक

C++ 14 में, सिंगल-कोट वर्ण को पूर्णांक शाब्दिक अंकों के विभाजक के रूप में संख्यात्मक शाब्दिक, दोनों पूर्णांक शाब्दिक और फ्लोटिंग स्थान शाब्दिक के रूप में इनिसीअलाइज़्ड प्रकार से उपयोग किया जा सकता है।[9] यह मानव पाठकों के लिए सबटाइजिंग के माध्यम से बड़ी संख्या को पार्स करना सरल बना सकता है।

auto integer_literal = 1'000'000;
auto floating_point_literal = 0.000'015'3;
auto binary_literal = 0b0100'1100'0110;
auto a_dozen_crores = 12'00'00'000;







सामान्य लैम्ब्डा

C++11 में, लैम्ब्डा फंक्शन पैरामीटर को ठोस प्रकारों के साथ डिक्लियर्ड करने की आवश्यकता है। C ++ 14 इस आवश्यकता को रिलैक्स्ड देता है, जिससे लैम्ब्डा फंक्शन पैरामीटर को auto टाइप विनिर्देशक के साथ डिक्लियर्ड करने की अनुमति देता है। [5]

auto lambda = [](auto x, auto y) {return x + y;};

विषय में auto टाइप की डिडक्शन, सामान्य लैम्ब्डा टेम्पलेट तर्क डिडक्शन के नियमों का पालन करते हैं (जो समान हैं, परन्तु सभी कारणों में समान नहीं हैं). उपरोक्त कोड इसके बराबर है:

struct
{
  template<typename T, typename U>
    auto operator()(T x, U y) const {return x + y;}
} lambda{};

सामान्य लैम्ब्डा अनिवार्य प्रकार से टेम्पलेटेड फ़ैक्टर लैम्ब्डा हैं।







लैम्ब्डा कैप्चर एक्सप्रेशंस

C++11 लैम्ब्डा फंक्शन वैल्यू-कॉपी या रेफरेन्स द्वारा उनके बाहरी स्कोप में डिक्लिरिएशन वेरिएबल को कैप्चर करता है। इसका अर्थ है कि लैम्ब्डा के वैल्यू मेंबर मात्र-चलने वाले प्रकार नहीं हो सकते हैं।[10]C++14 अधिकार किए गए मेंबर को इनिसीअलाइज़्ड प्रकार से एक्सप्रेशन के साथ प्रारंभ करने की अनुमति देता है। यह वैल्यू-मूव द्वारा अधिकार करने और लैम्ब्डा के इनिसीअलाइज़्ड मेंबर को डिक्लियर्ड करने की अनुमति देता है, बाहरी क्षेत्र में समान प्रकार से के बिना है।[5]

यह इनिसीअलाइज़र एक्सप्रेशन के उपयोग के माध्यम से किया जाता है:

auto lambda = [value = 1] {return value;};

लैम्ब्डा फंक्शन lambda रिटर्न 1, वह value जिसके साथ प्रारंभ किया गया था। डिक्लियर्ड कैप्चर इनिसीअलाइज़र एक्सप्रेशन से प्रकार को कम करता है जैसे कि auto द्वारा किया जाता है।  

यह मानक के उपयोग के माध्यम के मूव से कैप्चर करने के लिए उपयोग किया जा सकता है std::move फंक्शन है:

std::unique_ptr<int> ptr(new int(10));
auto lambda = [value = std::move(ptr)] {return *value;};

deprecated विशेषता इकाई को deprecated करने की अनुमति देती है, जो इसे अभी भी उपयोग करने के लिए लीगल बनाती है परन्तु उपयोगकर्ताओं को यह नोटिस देती है कि उपयोग को रोकने का प्रयास किया जाता है और संकलन के दौरान चेतावनी संदेश मुद्रित किया जा सकता है। deprecated वैकल्पिक स्ट्रिंग शाब्दिक के तर्क के रूप में प्रकट हो सकता है, deprecated के योग्यता की व्याख्या करने और प्रतिस्थापन का सुझाव देने के लिए होता है।

[[deprecated]] int f();

[[deprecated("g() is thread-unsafe. Use h() instead")]]
void g( int& x );

void h( int& x );

void test()
{
  int a = f(); // warning: 'f' is deprecated
  g(a); // warning: 'g' is deprecated: g() is thread-unsafe. Use h() instead
}







नई स्टैण्डर्ड लाइब्रेरी सुविधाएँ

शेयर्ड म्यूटेक्स और लॉकिंग

C++ 14 शेयर्ड टाइम म्यूटेक्स और सहयोगी शेयर्ड लॉक टाइप जोड़ता है।[11][12]

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

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

C++ 14 लुकअप को इनिसीअलाइज़्ड प्रकार के माध्यम से करने की अनुमति देता है, जब तक कि समान ऑपरेटर उस प्रकार की समानता वास्तविक कुंजी प्रकार से कर सकता है।[13] यह मानचित्र की अनुमति देगा std::string के विरुद्ध समान करने के लिए कुछ मूल्य const char* या कोई अन्य प्रकार जिसके लिए operator< ऑपरेटर ओवरलोड उपलब्ध है। यह डमी ऑब्जेक्ट बनाने के लिए खोज के उपयोगकर्ता को परेशान किये बिना मेंबर के वैल्यू द्वारा std::set में समग्र ऑब्जेक्ट्स को अनुक्रमणित करने के लिए भी उपयोगी है (उदाहरण के लिए किसी व्यक्ति को नाम से ढूंढने के लिए struct Person की संरचना बनाना)।

बैकवर्ड कम्पैटिबिलिटी को बनाए रखने के लिए, विषम लुकअप की अनुमति मात्र तभी दी जाती है जब अस्सोसिएटिव कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। स्टैण्डर्ड लाइब्रेरी क्लासेज std::less<>और std::greater<> विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।[14]

स्टैण्डर्ड उपयोगकर्ता परिभाषित लिटरल

C++ 11 ने उपयोगकर्ता परिभाषित लिटरल प्रत्यय के लिए सिंटैक्स को परिभाषित किया, परन्तु स्टैण्डर्ड लाइब्रेरी ने उनमें से किसी का भी उपयोग नहीं किया गया है। C++14 निम्नलिखित स्टैण्डर्ड अक्षर जोड़ता है:[13]

  • "s", विभिन्न बनाने के लिए std::basic_string टाइप है।
  • "h", "min", "s", "ms", "us", "ns" संबंधित बनाने के लिए std::chrono::duration समय अंतराल है।
  • "if", "i", "il", संबंधित बनाने के लिए std::complex<float>, std::complex<double> और std::complex<long double> काल्पनिक संख्या है।
auto str = "hello world"s; // auto deduces string
auto dur = 60s;            // auto deduces chrono::seconds
auto z   = 1i;             // auto deduces complex<double>

edit sourceदो एस शाब्दिक बातचीत नहीं करते हैं, क्योंकि स्ट्रिंग मात्र स्ट्रिंग अक्षर पर चलती है, और सेकेंड के लिए मात्र संख्याओं पर ही चलती है।[15]

टाइप के माध्यम से टपल एड्रेसिंग

std::tuple में प्रस्तुत प्रकार संकलित-समय स्थिर पूर्णांकों द्वारा टाइप किये गए मानों के कुल योग को अनुक्रमित करने की अनुमति देता है। C ++ 14 इसे इंडेक्स के विपरीत टाइप द्वारा टपल से लाने की अनुमति देने के लिए विस्तारित करता है।[13]यदि टपल में एक से अत्यधिक प्रकार के तत्व हैं, तो संकलन-समय त्रुटि परिणाम होता है:


tuple<string, string, int> t("foo", "bar", 7);
int i = get<int>(t);        // i == 7
int j = get<2>(t);          // Same as before: j == 7
string s = get<string>(t);  // Compile-time error due to ambiguity
 स्माल लाइब्रेरी आकृति 





Documentation/doc

std::make_unique जैसे प्रयोग कर सकते हैं std::make_shared के लिए std::unique_ptr ऑब्जेक्ट है।[5]

std::integral_constant ओवरलोड निरंतर मान रिटर्न करने के लिए operator() प्राप्त किया है।[13]

वर्ग टेम्पले std::integer_sequence और संबंधित उपनाम टेम्पलेट संकलन-टाइम इंटीग्रल सीक्वेंस का प्रतिनिधित्व करने के लिए जोड़े गए थे, जैसे पैरामीटर पैक में तत्वों के सूचकांक हैं।[16] वैश्विक std::rbegin/std::rend फंक्शन को बढ़ाया गया std::crbegin/std::crend फंक्शन, जो निरंतर इटरेटर रिटर्न हैं, और std::rbegin/std::rend और std::crbegin/std::crendजो रिवर्स इटरेटर रिटर्न हैं। std::exchange फ़ंक्शन टेम्प्लेट वेरिएबल के लिए नया वैल्यू निर्दिष्ट करता है और पुराना वैल्यू रिटर्न करता है।[17] नए ओवरलोड std::equal, std::mismatch, और std::is_permutation दूसरी श्रेणी के लिए इरिटेटर की जोड़ी लें, जिससे की कॉलर को अलग से यह जांचने की आवश्यकता न हो कि दो श्रेणियां समान लंबाई की हैं।[18]

std::is_finalटाइप विशेषता यह पता लगाती है कि कोई final वर्ग चिह्नित है या नहीं है।std::quoted स्ट्रीम I/O मैनिपुलेटर आउटपुट पर डेलीमीटर्स (डबल-कोट के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड डेलीमीटर्स से बचने अनुमति देता है।[19]

संकलक समर्थन

क्लांग ने 3.4 में C++14 के लिए सपोर्ट समाप्त कर दिया, चूँकि मानक नाम C++1y के अनुसार, और क्लैंग 6 में C++14 को डिफ़ॉल्ट C++ मानक बनाया है।[20] GCC 5 में C++14 के लिए सपोर्ट समाप्त कर दिया, और C++14 को GCC 6 में डिफ़ॉल्ट C++ मानक बना दिया गया है।[21] माइक्रोसॉफ्ट विज़ुअल स्टुडिओ 2017 ने लगभग सभी C++14 सुविधाओं को क्रियान्वित कर दिया है।[22]

संदर्भ

  1. "Page 10 of: C++ auto and decltype Explained".
  2. 2.0 2.1 2.2 2.3 Wong, Michael (30 April 2013). "The View from the C++ Standard meeting April 2013 Part 1". C/C++ Cafe. Retrieved 27 January 2016.
  3. Merrill, Jason (17 April 2013). "N3638 Return type deduction for normal functions (Revision 5)". Retrieved 14 June 2013.
  4. Smith, Richard (18 April 2013). "N3652 Relaxing constraints on constexpr functions".
  5. 5.0 5.1 5.2 5.3 Sutter, Herb (20 April 2013). "Trip Report: ISO C++ Spring 2013 Meeting". isocpp.org. Retrieved 14 June 2013.
  6. Dos Reis, Gabriel (19 April 2013). "N3651 Variable Templates (Revision 1)" (PDF).
  7. Vandevoorde, Daveed; Voutilainen, Ville (17 April 2013). "N3653 Member initializers and aggregates".
  8. "23479 – Implement binary constants with a "0b" prefix".
  9. Crowl, Lawrence; Smith, Richard; Snyder, Jeff; Vandevoorde, Daveed (25 September 2013). "N3781 Single-Quotation-Mark as a Digit Separator" (PDF).
  10. "Move capture in Lambda". Stack Overflow.
  11. Wong, Michael (30 April 2013). "The View from the C++ Standard meeting April 2013 Part 3". C/C++ Cafe. Retrieved 14 June 2013.
  12. Hinnant, Howard; Vollmann, Detlef; Boehm, Hans (19 April 2013). "N3659 Shared locking in C++ (Revision 2)".
  13. 13.0 13.1 13.2 13.3 Wong, Michael (26 April 2013). "The View from the C++ Standard meeting April 2013 Part 2". C/C++ Cafe. Retrieved 14 June 2013.
  14. "N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)". 19 March 2013.
  15. Sommerlad, Peter (18 April 2013). "N3642 User-defined Literals for Standard Library Types (part 1 - version 4)" (PDF).
  16. Wakely, Jonathan (18 April 2013). "N3658 Compile-time integer sequences". Retrieved 5 January 2016.
  17. Yasskin, Jeffrey (19 April 2013). "N3668 exchange() utility function, revision 3". Retrieved 5 January 2016.
  18. Spertus, Mike; Pall, Attila (19 April 2013). "N3671 Making non-modifying sequence operations more robust: Revision 2". Retrieved 5 January 2016.
  19. Dawes, Beman (19 April 2013). "N3654 Quoted Strings Library Proposal (Revision 2)". Retrieved 5 January 2016.
  20. "C++ Support in Clang". Retrieved 28 May 2016.
  21. "C++ Standards Support in GCC". Retrieved 28 May 2016.
  22. "C++ Standards Conformance from Microsoft". 7 March 2017. Retrieved 7 March 2017.

बाहरी संबंध