C++14: Difference between revisions
Line 10: | Line 10: | ||
सी++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 में अनुगामी रिटर्न प्रकार विनिर्देशक के बिना है: | सी++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 में अनुगामी रिटर्न प्रकार विनिर्देशक के बिना है: | ||
ऑटो रिटर्न परिणाम के प्रकार (); // रिटर्न प्रकार निर्धारित किया जाना है। | |||
ऑटो | |||
यदि | यदि कार्यों के कार्यान्वयन में कई रिटर्न अभिव्यक्ति का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का अनुमान लगाना चाहिए।<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 /> | ||
ऑटो सही (आईएनटी आई) | |||
ऑटो सही ( | |||
{ | { | ||
यदि (आई==1) | |||
रिटर्न आई; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है। | |||
रिटर्न सही (आई-1)+आई; // ठीक है इसे अभी कॉल करें | |||
} | } | ||
ऑटो गलत ( | ऑटो गलत (आईएनटी आई) { | ||
{ | यदि (आई! = 1) | ||
रिटर्न गलत (आई-1)+आई; // इसे कॉल करना बहुत तेजी होगा। कोई पूर्व रिटर्न कथन नहीं है। | |||
रिटर्न आई ; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है। | |||
} | } | ||
</वाक्यविन्यास हाइलाइट> | </वाक्यविन्यास हाइलाइट> |
Revision as of 13:27, 5 March 2023
C++ language revisions |
---|
सी++14, सी++ प्रोग्रामिंग भाषा के मानकीकरण के लिए अंतर्राष्ट्रीय संगठन/अंतर्राष्ट्रीय इंटरनेशनल इलेक्ट्रोटेक्नीकल कमीशन मानक का संस्करण है। इसका उद्देश्य सी++11 पर कम विस्तार होना है, जिसमें मुख्य प्रकार से बग फिक्स और छोटे सुधार सम्मिलित हैं, और इसे सी++17 द्वारा प्रतिस्थापित किया गया था। इसकी स्वीकृति की घोषणा 18 अगस्त 2014 को की गई थी।[1] सी++14 को दिसंबर 2014 में आईएसओ/आईइसी 14882:2014 के रूप में प्रकाशित किया गया था।[2] क्योंकि पहले के सी++ मानक संशोधनों में काफी देर हो चुकी थी, सी++1वाई नाम का उपयोग कभी-कभी इसके अनुमति तक किया जाता था, इसी प्रकार सी++11 मानक को 2010 से पहले इसकी रिलीज की अपेक्षा के साथ सी++ 0एक्स कहा जाता था (चूँकि वास्तव में यह 2010 और अंत में 2011 में स्खलित हो गया)।
नई भाषा सुविधाएँ
ये सी ++ 14 की मुख्य भाषा में जोड़े गए विशेषताएँ हैं।
फंक्शन रिटर्न टाइप डिडक्शन
सी++11 ने रिटर्न कथन को दिए गए अभिव्यक्ति के प्रकार के आधार पर रिटर्न प्रकार को निकालने के लिए लैम्ब्डा फ़ंक्शन (कंप्यूटर प्रोग्रामिंग) की अनुमति दी है। सी++14 सभी कार्यों के लिए यह क्षमता प्रदान करता है। यह इन सुविधाओं को लैम्ब्डा कार्यों तक विस्तारित करता है, जो उन कार्यों के लिए रिटर्न प्रकार की परिणाम की अनुमति देता है जो रिटर्न अभिव्यक्ति नहीं बनाते हैं। [3] रिटर्न प्रकार के परिणाम को प्रेरित करने के लिए, फ़ंक्शन को घोषित ऑटो वापसी प्रकार के रूप में घोषित किया जाना चाहिए, परन्तु सी ++ 11 में अनुगामी रिटर्न प्रकार विनिर्देशक के बिना है:
ऑटो रिटर्न परिणाम के प्रकार (); // रिटर्न प्रकार निर्धारित किया जाना है।
यदि कार्यों के कार्यान्वयन में कई रिटर्न अभिव्यक्ति का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का अनुमान लगाना चाहिए।[4] उनके रिटर्न प्रकार को निकालने वाले कार्यों को आगे घोषित किया जा सकता है, परन्तु जब तक उन्हें परिभाषित नहीं किया जाता तब तक उनका उपयोग नहीं किया जा सकता है। उनकी परिभाषाएँ उनका उपयोग करने वाली अनुवाद इकाई के लिए उपलब्ध होनी चाहिए।
इस प्रकार के कार्य के साथ प्रत्यावर्तन का उपयोग किया जा सकता है, परन्तु कार्य की परिभाषा में कम से कम रिटर्न कथन के बाद पुनरावर्ती कॉल होना चाहिए:[4]
ऑटो सही (आईएनटी आई) {
यदि (आई==1) रिटर्न आई; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है।
रिटर्न सही (आई-1)+आई; // ठीक है इसे अभी कॉल करें
}
ऑटो गलत (आईएनटी आई) {
यदि (आई! = 1) रिटर्न गलत (आई-1)+आई; // इसे कॉल करना बहुत तेजी होगा। कोई पूर्व रिटर्न कथन नहीं है।
रिटर्न आई ; // रिटर्न प्रकार आईएनटी के प्रकार में घटाया गया है।
} </वाक्यविन्यास हाइलाइट>
घोषणा पर वैकल्पिक प्रकार की कटौती
सी++11 में, टाइप डिडक्शन के दो तरीके जोड़े गए थे। auto
दी गई अभिव्यक्ति के आधार पर उपयुक्त प्रकार का एक चर बनाने का एक तरीका था। decltype
दी गई अभिव्यक्ति के प्रकार की गणना करने का एक तरीका था। हालाँकि, decltype
और auto
प्रकार अलग-अलग प्रकार से निकालते हैं। विशेष रूप से, auto
हमेशा एक गैर-संदर्भ प्रकार का अनुमान लगाता है, जैसे कि उपयोग करके std::decay
, जबकि auto&&
हमेशा एक संदर्भ प्रकार निकालता है। हालाँकि, decltype
अभिव्यक्ति की मूल्य श्रेणी और अभिव्यक्ति की प्रकृति के आधार पर एक संदर्भ या गैर-संदर्भ प्रकार को कम करने के लिए प्रेरित किया जा सकता है:[5][3]
<वाक्यविन्यास लैंग = सीपीपी> int मैं; इंट एंड& च (); ऑटो x3a = मैं; // decltype(x3a) int है घोषणापत्र (i) x3d = i; // decltype(x3d) int है ऑटो x4a = (मैं); // decltype(x4a) इंट है decltype ((i)) x4d = (i); // decltype(x4d) int& है ऑटो x5a = च (); // decltype(x5a) int है decltype (एफ ()) x5d = एफ (); // decltype(x5d) int&& है </वाक्यविन्यास हाइलाइट>
सी ++ 14 जोड़ता है decltype(auto)
वाक्य - विन्यास। यह अनुमति देता है auto
घोषणाओं का उपयोग करने के लिए decltype
दी गई अभिव्यक्ति पर नियम। decltype(auto)
e> सिंटैक्स का उपयोग #Function रिटर्न टाइप डिडक्शन के साथ भी किया जा सकता है decltype(auto)
इसके बजाय सिंटैक्स auto
फ़ंक्शन के रिटर्न प्रकार की कटौती के लिए।[4]
रिलैक्स्ड कॉन्स्टेक्स प्रतिबंध
सी++11 ने constexpr-घोषित फ़ंक्शन की अवधारणा पेश की; एक फ़ंक्शन जिसे संकलन समय पर निष्पादित किया जा सकता है। उनके वापसी मूल्यों को उन ऑपरेशनों द्वारा उपभोग किया जा सकता है जिनके लिए निरंतर अभिव्यक्ति की आवश्यकता होती है, जैसे पूर्णांक टेम्पलेट तर्क। हालाँकि, सी++11 constexpr फ़ंक्शंस में केवल एक ही एक्सप्रेशन हो सकता है जो लौटाया जाता है (साथ ही static_assert
s और अन्य घोषणाओं की एक छोटी संख्या)।
सी++14 इन प्रतिबंधों को शिथिल करता है। Constexpr-घोषित कार्यों में अब निम्नलिखित शामिल हो सकते हैं:[3]
- को छोड़कर कोई भी घोषणा:
static
याthread_local
चर।- प्रारंभिक के बिना परिवर्तनीय घोषणाएं।
- सशर्त ब्रांचिंग स्टेटमेंट
if
औरswitch
. - रेंज-आधारित सहित कोई भी लूपिंग स्टेटमेंट
for
. - अभिव्यक्तियाँ जो किसी वस्तु के मूल्य को बदल देती हैं यदि उस वस्तु का जीवनकाल स्थिर अभिव्यक्ति समारोह के भीतर शुरू होता है। इसमें किसी भी गैर-
const
constexpr
-घोषित गैर-स्थैतिक सदस्य कार्य।
goto
सी ++ 14 आराम से कॉन्स्टैक्स-घोषित कार्यों में बयान प्रतिबंधित हैं।
साथ ही, सी ++ 11 ने कहा कि सभी गैर-स्थैतिक सदस्य कार्य घोषित किए गए थे constexpr
भी स्पष्ट रूप से घोषित किए गए थे const
, इसके संबंध में this
. वह तब से हटा दिया गया है; गैर-स्थैतिक सदस्य कार्य गैर-स्थैतिक हो सकते हैंconst
.[6] हालांकि, उपरोक्त प्रतिबंधों के अनुसार, एक गैर-const
constexpr
सदस्य फ़ंक्शन केवल एक वर्ग सदस्य को संशोधित कर सकता है यदि उस वस्तु का जीवनकाल निरंतर अभिव्यक्ति मूल्यांकन के भीतर शुरू हुआ हो।
चर टेम्पलेट्स
सी ++ के पूर्व संस्करणों में, केवल फ़ंक्शंस, क्लासेस या टाइप उपनामों को टेम्पलेट किया जा सकता है। सी++14 टेम्पलेटेड वेरिएबल्स के निर्माण की अनुमति देता है। प्रस्ताव में दिया गया एक उदाहरण एक चर है pi
जिसे विभिन्न प्रकारों के लिए पाई का मान प्राप्त करने के लिए पढ़ा जा सकता है (जैसे, 3
जब एक अभिन्न प्रकार के रूप में पढ़ा जाता है; के साथ संभव निकटतम मूल्य float
, double
या long double
सटीक जब के रूप में पढ़ा float
, double
या long double
, क्रमश; वगैरह।)।
विशेषज्ञता सहित ऐसी घोषणाओं और परिभाषाओं पर टेम्प्लेट के सामान्य नियम लागू होते हैं।[7][8] <वाक्यविन्यास लैंग = सीपीपी> टेम्पलेट <टाइपनेम टी> constexpr टी पाई = टी (3.141592653589793238462643383);
// सामान्य विशेषज्ञता नियम लागू होते हैं: टेम्पलेट <> constexpr const char* pi<const char*> = pi; </वाक्यविन्यास हाइलाइट>
सकल सदस्य आरंभीकरण
सी ++ 11 ने सदस्य प्रारंभकर्ता जोड़े, यदि कोई निर्माता सदस्य को स्वयं प्रारंभ नहीं करता है तो कक्षा के दायरे में सदस्यों पर लागू होने वाले भाव। सदस्य प्रारंभकर्ताओं के साथ किसी भी वर्ग को स्पष्ट रूप से बाहर करने के लिए समुच्चय की परिभाषा बदल दी गई थी; इसलिए, उन्हें कुल आरंभीकरण का उपयोग करने की अनुमति नहीं है।
सी++14 इस प्रतिबंध को शिथिल करता है,[3]ऐसे प्रकारों पर कुल आरंभीकरण की अनुमति देना। यदि ब्रेस्ड इनिट सूची उस तर्क के लिए कोई मान प्रदान नहीं करती है, तो सदस्य प्रारंभकर्ता इसका ख्याल रखता है।[9]
बाइनरी शाब्दिक
सी ++ 14 में संख्यात्मक अक्षर बाइनरी संख्या में निर्दिष्ट किए जा सकते हैं।[3]सिंटैक्स उपसर्गों का उपयोग करता है 0b
या 0B
. सिंटैक्स का उपयोग अन्य भाषाओं में भी किया जाता है उदा। जावा (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी #, स्विफ्ट (प्रोग्रामिंग भाषा), जाओ (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), OCaml, और एक के रूप में कम से कम 2007 से कुछ सी कंपाइलर्स में अनौपचारिक विस्तार।[10]
अंक विभाजक
सी ++ 14 में, एकल-उद्धरण वर्ण को पूर्णांक शाब्दिक # अंकों के विभाजक के रूप में संख्यात्मक शाब्दिक, दोनों पूर्णांक शाब्दिक और फ्लोटिंग पॉइंट शाब्दिक के रूप में मनमाने ढंग से उपयोग किया जा सकता है।[11] यह मानव पाठकों के लिए उपकरना के माध्यम से बड़ी संख्या को पार्स करना आसान बना सकता है।
<वाक्यविन्यास लैंग = सीपीपी> ऑटो पूर्णांक_लिटरल = 1'000'000; ऑटो फ्लोटिंग_पॉइंट_लिटरल = 0.000'015'3; ऑटो बाइनरी_लिटरल = 0b0100'1100'0110; ऑटो a_dozen_crores = 12'00'00'000; </वाक्यविन्यास हाइलाइट>
सामान्य लैम्ब्डा
सी ++ 11 में, अज्ञात फ़ंक्शन पैरामीटर को ठोस प्रकारों के साथ घोषित करने की आवश्यकता है। सी ++ 14 इस आवश्यकता को आराम देता है, जिससे लैम्ब्डा फ़ंक्शन पैरामीटर को घोषित किया जा सकता है auto
प्रकार विनिर्देशक।[7]
<वाक्यविन्यास लैंग = सीपीपी>
ऑटो लैम्ब्डा = [] (ऑटो एक्स, ऑटो वाई) {रिटर्न एक्स + वाई;};
</वाक्यविन्यास हाइलाइट>
विषय में auto
प्रकार की कटौती, सामान्य लैम्ब्डा टेम्पलेट तर्क कटौती के नियमों का पालन करते हैं (जो समान हैं, लेकिन सभी मामलों में समान नहीं हैं[clarification needed]). उपरोक्त कोड इसके बराबर है:[12]
<वाक्यविन्यास लैंग = सीपीपी>
struct
{
टेम्पलेट <टाइपनाम टी, टाइपनाम यू> ऑटो ऑपरेटर () (टी एक्स, यू वाई) कास्ट {रिटर्न एक्स + वाई;}
} लैम्ब्डा {}; </वाक्यविन्यास हाइलाइट>
सामान्य लैम्ब्डा अनिवार्य रूप से टेम्पलेटेड फ़ैक्टर लैम्ब्डा हैं।
लैम्ब्डा कैप्चर एक्सप्रेशंस
सी++11 लैम्ब्डा फ़ंक्शंस मूल्य-कॉपी या संदर्भ द्वारा उनके बाहरी दायरे में घोषित चर को कैप्चर करता है। इसका मतलब है कि लैम्ब्डा के मूल्य सदस्य केवल-चलने वाले प्रकार नहीं हो सकते हैं।[13] सी ++ 14 कैप्चर किए गए सदस्यों को मनमाने ढंग से अभिव्यक्तियों के साथ प्रारंभ करने की अनुमति देता है। यह वैल्यू-मूव द्वारा कब्जा करने और लैम्ब्डा के मनमानी सदस्यों को घोषित करने की अनुमति देता है, बाहरी दायरे में एक समान रूप से नामित चर के बिना।[7]
यह प्रारंभिक अभिव्यक्ति के उपयोग के माध्यम से किया जाता है:
<वाक्यविन्यास लैंग = सीपीपी> ऑटो लैम्ब्डा = [मूल्य = 1] {वापसी मूल्य;}; </वाक्यविन्यास हाइलाइट>
लैम्ब्डा समारोह lambda
रिटर्न 1, जो क्या है value
के साथ प्रारंभ किया गया था। घोषित कैप्चर प्रारंभकर्ता अभिव्यक्ति से प्रकार को कम करता है जैसे कि द्वारा auto
.
यह मानक के उपयोग के माध्यम से चाल से कब्जा करने के लिए इस्तेमाल किया जा सकता है std::move
समारोह:
<वाक्यविन्यास लैंग = सीपीपी> std::unique_ptr<int> ptr(new int(10)); ऑटो लैम्ब्डा = [मूल्य = एसटीडी :: चाल (पीटीआर)] {वापसी * मूल्य;}; </वाक्यविन्यास हाइलाइट>
=== विशेषता [[deprecated]]
=== deprecated
ई> विशेषता एक इकाई को पदावनत करने की अनुमति देती है, जो इसे अभी भी उपयोग करने के लिए कानूनी बनाती है लेकिन उपयोगकर्ताओं को यह नोटिस देती है कि उपयोग को हतोत्साहित किया जाता है और संकलन के दौरान एक चेतावनी संदेश मुद्रित किया जा सकता है। एक वैकल्पिक स्ट्रिंग शाब्दिक के तर्क के रूप में प्रकट हो सकता है deprecated
, पदावनति के औचित्य की व्याख्या करने और प्रतिस्थापन का सुझाव देने के लिए।
<वाक्यविन्यास लैंग = सीपीपी>
बहिष्कृत int f();
पदावनत (g() थ्रेड-असुरक्षित है। इसके बजाय h() का उपयोग करें) शून्य जी (इंट एंड एक्स);
शून्य एच (इंट एंड एक्स);
शून्य परीक्षण () {
इंट ए = एफ (); // चेतावनी: 'एफ' बहिष्कृत है जी (ए); // चेतावनी: 'जी' बहिष्कृत है: जी() थ्रेड-असुरक्षित है। इसके बजाय एच() का प्रयोग करें
} </वाक्यविन्यास हाइलाइट>
नई मानक पुस्तकालय सुविधाएँ
साझा म्यूटेक्स और लॉकिंग
सी ++ 14 एक साझा समयबद्ध म्यूटेक्स और एक सहयोगी साझा लॉक प्रकार जोड़ता है।[14][15]
साहचर्य कंटेनरों में विषम लुकअप
सी ++ मानक पुस्तकालय चार सहयोगी कंटेनर वर्गों को परिभाषित करता है। ये वर्ग उपयोगकर्ता को उस प्रकार के मूल्य के आधार पर मूल्य देखने की अनुमति देते हैं। नक्शा कंटेनर उपयोगकर्ता को एक कुंजी और एक मान निर्दिष्ट करने की अनुमति देता है, जहां कुंजी द्वारा लुकअप किया जाता है और एक मान देता है। हालाँकि, लुकअप हमेशा विशिष्ट कुंजी प्रकार द्वारा किया जाता है, चाहे वह मानचित्र की तरह कुंजी हो या सेट के रूप में स्वयं मान हो।
सी ++ 14 लुकअप को मनमाना प्रकार के माध्यम से करने की अनुमति देता है, जब तक कि तुलना ऑपरेटर उस प्रकार की तुलना वास्तविक कुंजी प्रकार से कर सकता है।[16] यह एक मानचित्र की अनुमति देगा std::string
ए के खिलाफ तुलना करने के लिए कुछ मूल्य const char*
या कोई अन्य प्रकार जिसके लिए a operator<
अधिभार उपलब्ध है। यह a में समग्र वस्तुओं को अनुक्रमित करने के लिए भी उपयोगी है std::set
उपयोगकर्ता को मजबूर किए बिना एकल सदस्य के मूल्य से find
एक डमी वस्तु बनाने के लिए (उदाहरण के लिए एक संपूर्ण बनाना struct Person
नाम से किसी व्यक्ति को खोजने के लिए)।
पिछली संगतता को बनाए रखने के लिए, विषम लुकअप की अनुमति केवल तभी दी जाती है जब साहचर्य कंटेनर को दिया गया तुलनित्र इसकी अनुमति देता है। मानक पुस्तकालय कक्षाएं std::less<>
और std::greater<>
विषम लुकअप की अनुमति देने के लिए संवर्धित हैं।[17]
मानक उपयोगकर्ता परिभाषित शाब्दिक
सी ++ 11 ने उपयोगकर्ता परिभाषित शाब्दिक प्रत्यय के लिए सिंटैक्स को परिभाषित किया, लेकिन मानक पुस्तकालय ने उनमें से किसी का भी उपयोग नहीं किया। सी ++ 14 निम्नलिखित मानक अक्षर जोड़ता है:[16]
- एस, विभिन्न बनाने के लिए
std::basic_string
प्रकार। - एच, मिनट, एस, एमएस, यूएस, एनएस, संबंधित बनाने के लिए
std::chrono::duration
समय अंतराल। - if , i , il , संबंधित बनाने के लिए
std::complex<float>
,std::complex<double>
औरstd::complex<long double>
काल्पनिक संख्या।
<वाक्यविन्यास लैंग = सीपीपी> ऑटो स्ट्र = हैलो वर्ल्ड एस; // ऑटो स्ट्रिंग घटाता है ऑटो ड्यूर = 60s; // ऑटो क्रोनो :: सेकेंड घटाता है ऑटो जेड = 1i; // ऑटो जटिल <डबल> घटाता है </वाक्यविन्यास हाइलाइट>
दो एस शाब्दिक बातचीत नहीं करते हैं, क्योंकि स्ट्रिंग केवल स्ट्रिंग अक्षर पर चलती है, और सेकेंड के लिए केवल संख्याओं पर ही चलती है।[18]
=== टाइप === के माध्यम से टपल एड्रेसिंग std::tuple
ई> सी ++ 11 में पेश किया गया प्रकार टाइप किए गए मानों को एक संकलन-समय निरंतर पूर्णांक द्वारा अनुक्रमित करने की अनुमति देता है। सी ++ 14 इसे इंडेक्स के बजाय टाइप द्वारा टपल से लाने की अनुमति देने के लिए विस्तारित करता है।[16]यदि टपल में एक से अधिक प्रकार के तत्व हैं, तो एक संकलन-समय त्रुटि परिणाम:[19]
<वाक्यविन्यास लैंग = सीपीपी>
टपल <स्ट्रिंग, स्ट्रिंग, इंट> टी (फू, बार, 7);
int i = get<int>(t); // मैं == 7
int j = get<2>(t); // पहले जैसा: j == 7
स्ट्रिंग एस = <स्ट्रिंग> (टी) प्राप्त करें; // अस्पष्टता के कारण संकलन-समय त्रुटि
</वाक्यविन्यास हाइलाइट>
छोटी पुस्तकालय सुविधाएँ
std::make_unique
जैसे प्रयोग कर सकते हैं std::make_shared
के लिए std::unique_ptr
वस्तुओं।[7]
std::integral_constant
एक प्राप्त किया operator()
अधिभार निरंतर मान वापस करने के लिए।[16]
वर्ग टेम्पलेट std::integer_sequence
और संबंधित उपनाम टेम्पलेट संकलन-समय पूर्णांक अनुक्रमों का प्रतिनिधित्व करने के लिए जोड़े गए थे, जैसे पैरामीटर पैक में तत्वों के सूचकांक।[20]
वैश्विक std::begin
/std::end
कार्यों को बढ़ाया गया std::cbegin
/std::cend
कार्य, जो निरंतर पुनरावर्तक लौटाते हैं, और std::rbegin
/std::rend
और std::crbegin
/std::crend
जो रिवर्स इटरेटर लौटाते हैं। std::exchange
e> फ़ंक्शन टेम्प्लेट एक चर के लिए एक नया मान निर्दिष्ट करता है और पुराना मान लौटाता है।[21]
के नए अधिभार std::equal
, std::mismatch
, और std::is_permutation
दूसरी श्रेणी के लिए पुनरावृत्तियों की एक जोड़ी लें, ताकि कॉलर को अलग से यह जांचने की आवश्यकता न हो कि दो श्रेणियां समान लंबाई की हैं।[22]
std::is_final
ई> टाइप विशेषता यह पता लगाती है कि कोई वर्ग चिह्नित है या नहींfinal
.std::quoted
ई> स्ट्रीम I/O मैनिपुलेटर आउटपुट पर सीमांकक (दोहरे-उद्धरणों के लिए डिफ़ॉल्ट) रखकर और उन्हें इनपुट पर अलग करके, और किसी भी एम्बेडेड सीमांकक से बचकर, एम्बेडेड रिक्त स्थान के साथ तार डालने और निकालने की अनुमति देता है।[23]
संकलक समर्थन
बजना ने 3.4 में सी++14 के लिए समर्थन समाप्त कर दिया, हालांकि मानक नाम सी++1वाई के तहत, और क्लैंग 6 में सी++14 को डिफ़ॉल्ट सी++ मानक बनाया।[24] GNU कंपाइलर संग्रह ने GCC 5 में सी++14 के लिए समर्थन समाप्त कर दिया, और सी++14 को GCC 6 में डिफ़ॉल्ट सी++ मानक बना दिया।[25] Microsoft Visual Studio 2017 ने लगभग सभी सी++14 सुविधाओं को लागू कर दिया है।[26]
संदर्भ
- ↑ Sutter, Herb (August 18, 2014), We have C++14!, retrieved 2014-08-18
- ↑ "ISO/IEC 14882:2014". ISO.
- ↑ 3.0 3.1 3.2 3.3 3.4 Wong, Michael (30 April 2013). "The View from the C++ Standard meeting April 2013 Part 1". C/C++ Cafe. Retrieved 27 January 2016.
- ↑ 4.0 4.1 4.2 Merrill, Jason (17 April 2013). "N3638 Return type deduction for normal functions (Revision 5)". Retrieved 14 June 2013.
- ↑ "Page 10 of: C++ auto and decltype Explained".
- ↑ Smith, Richard (18 April 2013). "N3652 Relaxing constraints on constexpr functions".
- ↑ 7.0 7.1 7.2 7.3 Sutter, Herb (20 April 2013). "Trip Report: ISO C++ Spring 2013 Meeting". isocpp.org. Retrieved 14 June 2013.
- ↑ Dos Reis, Gabriel (19 April 2013). "N3651 Variable Templates (Revision 1)" (PDF).
- ↑ Vandevoorde, Daveed; Voutilainen, Ville (17 April 2013). "N3653 Member initializers and aggregates".
- ↑ "23479 – Implement binary constants with a "0b" prefix".
- ↑ Crowl, Lawrence; Smith, Richard; Snyder, Jeff; Vandevoorde, Daveed (25 September 2013). "N3781 Single-Quotation-Mark as a Digit Separator" (PDF).
- ↑ Vali, Faisal; Sutter, Herb; Abrahams, Dave (19 April 2013). "N3649 Generic (Polymorphic) Lambda Expressions (Revision 3)".
- ↑ "Move capture in Lambda". Stack Overflow.
- ↑ Wong, Michael (30 April 2013). "The View from the C++ Standard meeting April 2013 Part 3". C/C++ Cafe. Retrieved 14 June 2013.
- ↑ Hinnant, Howard; Vollmann, Detlef; Boehm, Hans (19 April 2013). "N3659 Shared locking in C++ (Revision 2)".
- ↑ 16.0 16.1 16.2 16.3 Wong, Michael (26 April 2013). "The View from the C++ Standard meeting April 2013 Part 2". C/C++ Cafe. Retrieved 14 June 2013.
- ↑ "N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)". 19 March 2013.
- ↑ Sommerlad, Peter (18 April 2013). "N3642 User-defined Literals for Standard Library Types (part 1 - version 4)" (PDF).
- ↑ Spertus, Mike (19 April 2013). "N3670 Wording for Addressing Tuples by Type: Revision 2".
- ↑ Wakely, Jonathan (18 April 2013). "N3658 Compile-time integer sequences". Retrieved 5 January 2016.
- ↑ Yasskin, Jeffrey (19 April 2013). "N3668 exchange() utility function, revision 3". Retrieved 5 January 2016.
- ↑ Spertus, Mike; Pall, Attila (19 April 2013). "N3671 Making non-modifying sequence operations more robust: Revision 2". Retrieved 5 January 2016.
- ↑ Dawes, Beman (19 April 2013). "N3654 Quoted Strings Library Proposal (Revision 2)". Retrieved 5 January 2016.
- ↑ "C++ Support in Clang". Retrieved 28 May 2016.
- ↑ "C++ Standards Support in GCC". Retrieved 28 May 2016.
- ↑ "C++ Standards Conformance from Microsoft". 7 March 2017. Retrieved 7 March 2017.
बाहरी संबंध
- C++14: What you need to know Overview of features in Dr. Dobb's, 16 Sept. 2014