सी++14

From alpha
Revision as of 12:02, 12 April 2024 by Indicwiki (talk | contribs) (Created page with "{{Short description|2014 edition of the C++ programming language standard}} {{C++ language revisions}} C++14, C++ प्रोग्रामिंग भाषा के...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Jump to navigation Jump to search

C++14, C++ प्रोग्रामिंग भाषा के लिए अंतर्राष्ट्रीय मानकीकरण संगठन/अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन 14882 मानक का एक संस्करण है। इसका उद्देश्य C++11 पर एक छोटी तानाना होना है, जिसमें मुख्य रूप से बग फिक्स और छोटे सुधार शामिल हैं, और इसे C++17 द्वारा प्रतिस्थापित किया गया था। इसकी मंजूरी की घोषणा 18 अगस्त 2014 को की गई थी.[1] C++14 को दिसंबर 2014 में ISO/IEC 14882:2014 के रूप में प्रकाशित किया गया था।[2] क्योंकि पहले C++ मानक संशोधन काफ़ी देर से हुए थे, C++1y नाम का उपयोग कभी-कभी इसके अनुमोदन तक किया जाता था, इसी तरह C++11 मानक को 2010 से पहले रिलीज़ होने की उम्मीद के साथ C++0x कहा जाता था (हालाँकि) वास्तव में यह 2010 और अंततः 2011 में फिसल गया)।

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

ये C++14 की मूल भाषा में जोड़ी गई विशेषताएं हैं।

फ़ंक्शन रिटर्न प्रकार कटौती

C++11 ने लैम्ब्डा फ़ंक्शन (कंप्यूटर प्रोग्रामिंग) को रिटर्न स्टेटमेंट में दिए गए अभिव्यक्ति के प्रकार के आधार पर रिटर्न प्रकार निकालने की अनुमति दी। C++14 सभी कार्यों के लिए यह क्षमता प्रदान करता है। यह इन सुविधाओं को लैम्ब्डा फ़ंक्शंस तक भी विस्तारित करता है, जो उन फ़ंक्शंस के लिए रिटर्न प्रकार की कटौती की अनुमति देता है जो फॉर्म के नहीं हैं return expression;.[3] रिटर्न प्रकार की कटौती को प्रेरित करने के लिए, फ़ंक्शन को घोषित किया जाना चाहिए auto रिटर्न प्रकार के रूप में, लेकिन C++11 में अनुवर्ती रिटर्न प्रकार विनिर्देशक के बिना:

auto DeduceReturnType();   // Return type to be determined.

यदि फ़ंक्शन के कार्यान्वयन में कई रिटर्न एक्सप्रेशन का उपयोग किया जाता है, तो उन सभी को एक ही प्रकार का परिणाम निकालना होगा।[4] फ़ंक्शन जो अपने रिटर्न प्रकार को कम करते हैं उन्हें आगे घोषित किया जा सकता है, लेकिन जब तक उन्हें परिभाषित नहीं किया जाता तब तक उनका उपयोग नहीं किया जा सकता है। उनकी परिभाषाएँ उनका उपयोग करने वाली अनुवाद इकाई के लिए उपलब्ध होनी चाहिए।

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

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 अभिव्यक्ति की मूल्य श्रेणी और उसके द्वारा निकाली जा रही अभिव्यक्ति की प्रकृति के आधार पर, संदर्भ या गैर-संदर्भ प्रकार निकालने के लिए प्रेरित किया जा सकता है:[5][3]

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 फ़ंक्शन के रिटर्न प्रकार की कटौती के लिए।[4]


शिथिल प्रतिबंध

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

C++14 इन प्रतिबंधों में ढील देता है। कॉन्स्टेक्सपीआर-घोषित फ़ंक्शंस में अब निम्नलिखित शामिल हो सकते हैं:[3]

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

goto C++14 रिलैक्स्ड कॉन्स्टेक्सपीआर-घोषित फ़ंक्शंस में कथन निषिद्ध हैं।

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

परिवर्तनीय टेम्पलेट

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

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

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 इस प्रतिबंध को शिथिल करता है,[3]ऐसे प्रकारों पर समग्र आरंभीकरण की अनुमति देना। यदि ब्रेस्ड इनिट सूची उस तर्क के लिए कोई मान प्रदान नहीं करती है, तो सदस्य प्रारंभकर्ता इसका ध्यान रखता है।[9]


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

C++14 में संख्यात्मक अक्षर बाइनरी संख्या में निर्दिष्ट किए जा सकते हैं।[3]वाक्यविन्यास उपसर्गों का उपयोग करता है 0b या 0B. वाक्यविन्यास का प्रयोग अन्य भाषाओं में भी किया जाता है जैसे जावा (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग भाषा)|सी#, स्विफ्ट (प्रोग्रामिंग भाषा), गो (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), ओकैमल, और एक के रूप में कम से कम 2007 से कुछ सी कंपाइलरों में अनौपचारिक विस्तार।[10]


अंक विभाजक

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

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 प्रकार निर्दिष्टकर्ता.[7]

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

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

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

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

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

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

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

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]] 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 एक साझा समयबद्ध म्यूटेक्स और एक साथी साझा लॉक प्रकार जोड़ता है।[14][15]


सहयोगी कंटेनरों में विषम लुकअप

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

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

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


मानक उपयोगकर्ता-परिभाषित शाब्दिक

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

  • एस, विभिन्न बनाने के लिए std::basic_string प्रकार.
  • h , min , s , ms , us , ns , संगत बनाने के लिए std::chrono::duration समय अंतराल।
  • यदि , मैं , आईएल , संगत बनाने के लिए 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>

दो s अक्षर परस्पर क्रिया नहीं करते हैं, क्योंकि स्ट्रिंग वाला केवल स्ट्रिंग अक्षर पर काम करता है, और सेकंड वाला केवल संख्याओं पर काम करता है।[18]


=== टपल को प्रकार के माध्यम से संबोधित करना === std::tuple e> C++11 में प्रस्तुत प्रकार, टाइप किए गए मानों के समुच्चय को संकलन-समय स्थिरांक पूर्णांक द्वारा अनुक्रमित करने की अनुमति देता है। C++14 इसे अनुक्रमणिका के बजाय प्रकार के अनुसार टुपल से लाने की अनुमति देने के लिए विस्तारित करता है।[16]यदि टुपल में प्रकार के एक से अधिक तत्व हैं, तो एक संकलन-समय त्रुटि परिणामित होती है:[19]

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


छोटी लाइब्रेरी सुविधाएँ

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 ई> फ़ंक्शन टेम्पलेट एक वेरिएबल के लिए एक नया मान निर्दिष्ट करता है और पुराना मान लौटाता है।[21] का नया अधिभार std::equal, std::mismatch, और std::is_permutation दूसरी श्रेणी के लिए पुनरावर्तकों की एक जोड़ी लें, ताकि कॉल करने वाले को अलग से जांचने की आवश्यकता न हो कि दोनों श्रेणियां समान लंबाई की हैं।[22]

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


संकलक समर्थन

बजना ने C++14 के लिए मानक नाम c++1y के तहत 3.4 में समर्थन समाप्त कर दिया, और C++14 को Clang 6 में डिफ़ॉल्ट C++ मानक बना दिया।[24] जीएनयू कंपाइलर संग्रह ने GCC 5 में C++14 के लिए समर्थन समाप्त कर दिया, और C++14 को GCC 6 में डिफ़ॉल्ट C++ मानक बना दिया।[25] Microsoft Visual Studio 2017 ने लगभग सभी C++14 सुविधाएँ लागू कर दी हैं।[26]


संदर्भ

  1. Sutter, Herb (August 18, 2014), We have C++14!, retrieved 2014-08-18
  2. "ISO/IEC 14882:2014". ISO.
  3. 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. 4.0 4.1 4.2 Merrill, Jason (17 April 2013). "N3638 Return type deduction for normal functions (Revision 5)". Retrieved 14 June 2013.
  5. "Page 10 of: C++ auto and decltype Explained".
  6. Smith, Richard (18 April 2013). "N3652 Relaxing constraints on constexpr functions".
  7. 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.
  8. Dos Reis, Gabriel (19 April 2013). "N3651 Variable Templates (Revision 1)" (PDF).
  9. Vandevoorde, Daveed; Voutilainen, Ville (17 April 2013). "N3653 Member initializers and aggregates".
  10. "23479 – Implement binary constants with a "0b" prefix".
  11. Crowl, Lawrence; Smith, Richard; Snyder, Jeff; Vandevoorde, Daveed (25 September 2013). "N3781 Single-Quotation-Mark as a Digit Separator" (PDF).
  12. Vali, Faisal; Sutter, Herb; Abrahams, Dave (19 April 2013). "N3649 Generic (Polymorphic) Lambda Expressions (Revision 3)".
  13. "लैम्ब्डा में कैप्चर ले जाएँ". Stack Overflow.
  14. Wong, Michael (30 April 2013). "The View from the C++ Standard meeting April 2013 Part 3". C/C++ Cafe. Retrieved 14 June 2013.
  15. Hinnant, Howard; Vollmann, Detlef; Boehm, Hans (19 April 2013). "N3659 Shared locking in C++ (Revision 2)".
  16. 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.
  17. "N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)". 19 March 2013.
  18. Sommerlad, Peter (18 April 2013). "N3642 User-defined Literals for Standard Library Types (part 1 - version 4)" (PDF).
  19. Spertus, Mike (19 April 2013). "N3670 Wording for Addressing Tuples by Type: Revision 2".
  20. Wakely, Jonathan (18 April 2013). "N3658 Compile-time integer sequences". Retrieved 5 January 2016.
  21. Yasskin, Jeffrey (19 April 2013). "N3668 exchange() utility function, revision 3". Retrieved 5 January 2016.
  22. Spertus, Mike; Pall, Attila (19 April 2013). "N3671 Making non-modifying sequence operations more robust: Revision 2". Retrieved 5 January 2016.
  23. Dawes, Beman (19 April 2013). "N3654 Quoted Strings Library Proposal (Revision 2)". Retrieved 5 January 2016.
  24. "क्लैंग में C++ सपोर्ट". Retrieved 28 May 2016.
  25. "जीसीसी में सी++ मानक समर्थन". Retrieved 28 May 2016.
  26. "माइक्रोसॉफ्ट से सी++ मानक अनुरूपता". 7 March 2017. Retrieved 7 March 2017.


बाहरी संबंध