Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++17 . की नई सुविधा

सी ++ मानक समिति हमेशा हर तीन साल में नई सुविधाओं को शिपिंग करने पर ध्यान केंद्रित कर रही है। विनिर्देश के दो मुख्य भाग प्रोग्रामिंग भाषा और मानक टेम्पलेट लाइब्रेरी (एसटीएल) की मुख्य कार्यक्षमता हैं। कोड को क्लीनर, आसान और कॉम्पैक्ट बनाने के लिए नई सुविधाएँ पेश की गई हैं। पेश की गई सुविधाओं की सूची निम्नलिखित है-:

<एच2>1. फ़ोल्ड एक्सप्रेशन

फोल्ड एक्सप्रेशन का उपयोग तर्कों की एक चर संख्या के लिए छोटे कोड लिखने के लिए किया जाता है जिसे किसी फ़ंक्शन में पास किया जा सकता है या फ़ंक्शन से वापस किया जा सकता है। यह तर्क के रूप में और फ़ंक्शन के रिटर्न स्टेटमेंट में किसी भी संख्या में चर के उपयोग को सक्षम बनाता है।

वाक्यविन्यास:-

  • यूनरी राइट फोल्ड - (पैक op1 ...)

  • यूनरी लेफ्ट फोल्ड - (… op1 pack )

  • बाइनरी लेफ्ट फोल्ड - (init op1 … op1 pack )

  • बाइनरी राइट फोल्ड - (पैक op1 … op1 init )

यहां पैक करें एक पैरामीटर पैक है जिसे किसी भी संख्या में चर के लिए विस्तारित किया जा सकता है। op1 एक ऑपरेटर है। (-, + , <=,>=, <,> , ==, *, /…. ) बाइनरी फोल्ड में, दोनों op1 एक ही ऑपरेटर हैं।

init एक अभिव्यक्ति है जिसे विस्तारित नहीं किया जा सकता है।

उदाहरण

#include <iostream>
#include <string>
using namespace std;
template<typename ...Args> auto addition(Args ...args){
   return (args + ... + 0);
}
template<typename ...Args> auto sum2(Args ...args){
   return (args + ...);
}
int main(){
   cout << "Sum is : "<<addition(1,1,1,1,1) << endl;
   cout << "Sum 2 is : "<<addition ( 1,2,3);
}

आउटपुट

Sum is : 5
Sum 2 is : 6

2. संरचना बाइंडिंग

इनका उपयोग एक जोड़ी, टपल आदि में मूल्यों के साथ आरंभिक होने के लिए कई चर घोषित करने के लिए किया जाता है। ये सभी चर के बंधन एक ही कथन में किए गए प्रारंभकर्ताओं के साथ होते हैं।

  • मामला 1:- किसी सरणी को बांधना

    पहचानकर्ता सूची में प्रत्येक पहचानकर्ता सरणी के तत्व के लिए lvalue का नाम बन जाता है। तत्वों की संख्या पहचानकर्ताओं की संख्या के बराबर होनी चाहिए।

    इंट ऐरी [3] ={ 3,4,5 };

    ऑटो [a,b,c] =arry;

    // यहां सरणी बनाई गई है और ए 3 को संदर्भित करता है, बी 4 को संदर्भित करता है और सी 5 को संदर्भित करता है।

  • केस 2:- टपल जैसे टाइप को बाइंड करना

    फ्लोट fnum{};

    चार ch1{};

    इंट नंबर{};

    std::tuple tplex(fnum, std::move(ch1) , number);

    कॉन्स्ट ऑटो और [पी, क्यू, आर] =tplex;

    // p fnum का जिक्र करते हुए स्ट्रक्चर्ड बाइंडिंग का नाम है

    // q संरचित बाइंडिंग का नाम है जो ch1 को संदर्भित करता है

    // r स्ट्रक्चर्ड बाइंडिंग का नाम है जो संख्या को संदर्भित करता है

  • मामला 3:- डेटा सदस्यों के लिए बाध्यकारी

    स्ट्रक्चर स्ट्रक्चरवर {

    परिवर्तनीय इंट num1 :2;

    वोलेटाइल डबल num2;

    };

    स्ट्रक्चरवर फंक ();

    कॉन्स्ट ऑटो [ए, बी] =func ();

    // a 2-बिट बिट फ़ील्ड के लिए एक int lvalue है

    // b एक स्थिरांक अस्थिर डबल अंतराल है

3. प्रत्यक्ष सूची का उपयोग करके एनम का प्रारंभ

C++17 के साथ एनमों को अब ब्रेसिज़ का उपयोग करके प्रारंभ किया जा सकता है।

वाक्यविन्यास:-

enum byte : unsigned char {};
byte b0 {0}; // OK
byte b1 = byte{1}; // OK
byte b2 = byte{256}; // ERROR - 0 to 255 only

4. अगर और स्विच के अंदर परिवर्तनीय घोषणा

सी ++ 17 अगर और स्विच स्थितियों के अंदर चर की घोषणा की अनुमति देता है। इससे समान नाम वाले वेरिएबल का उपयोग करना आसान हो जाता है जिनके अलग-अलग स्कोप होते हैं।

वाक्यविन्यास:-

if (data type variable condition)
{
   //statements
}
switch ( condition; variable )
{
   //statements
}

5. अगर constexpr स्टेटमेंट

टेम्पलेट कोड के लिए उपयोगी सुविधा। if constexpr कथन का संकलन समय पर मूल्यांकन किया जाता है।

यह कैसा है

नीचे दी गई तुलनाओं का उपयोग करके मददगार दिखाया जा सकता है:-

सामान्य यदि-अन्य विवरण:-

int var = 10;
if (var >= 10) {
   var=var+10;
} else {
   var=var-10;
}

Constexpr if-else कथन:-

template <typename T>
auto length ( T const& value ) { 
   //checking if T is integer or not
   if (is_integral<T>::value) {
      return value;
   } else {
      return value.length();
   }
}

6. नेस्टेड नेमस्पेस

नेमस्पेस का उपयोग समान कोड जैसे वर्गों और कार्यों को एक साथ समूहित करने के लिए किया जाता है जो सहसंबद्ध होते हैं। सी ++ 17 नेस्टेड नेमस्पेस का उपयोग करने के अधिक आसान सिंटैक्स की अनुमति देता है। पहले नेस्टेड नेमस्पेस की संख्या अधिक होने पर सिंटैक्स काफी गड़बड़ था। ब्रेसिज़ को संभालना अब आवश्यक नहीं है।

C++17 से पहले:-

namespace Earth{

   namespace Continent {
      namespace Country {
         class City {
         ..........
}; } } }

नया सिंटैक्स:-

namespace Earth :: Continent :: Country {
   class City {
      ..........
}; }

  1. नए iPhone 7 से अपेक्षित 7 चीजें

    अत्यधिक प्रतीक्षित iPhone 7 को आधिकारिक तौर पर दुनिया के सामने पेश किए जाने से पहले 12 घंटे से भी कम समय बचा है। इसलिए, हम निश्चित हैं कि आप में से अधिकांश जीज़मो फ्रीक्स और सेब के उपासक इसकी नई विशेषताओं को जानने के लिए उत्सुक होंगे। इसका पूर्ववर्ती, iPhone 6 निश्चित रूप से झुकने और विस्तार योग्य म

  1. ट्विटर ने नया टाइमलाइन फीचर पेश किया

    रेस में बने रहने के लिए ट्विटर नए-नए फीचर जोड़ता रहता है और इसी सिलसिले में एक नया टाइमलाइन फीचर रोल आउट करने की बात कही जा रही है। यह टाइमलाइन सुविधा एक बैनर के तहत एक कहानी के बारे में सभी ट्वीट्स लाएगी, जिससे उपयोगकर्ताओं को अलग-अलग दृष्टिकोण देखने में आसानी होगी। एक औसत उपयोगकर्ता को ट्विटर का

  1. Facebook में बदलाव, नई सुविधाओं की घोषणा!

    फेसबुक पर हाल के महीने कठिन थे, क्योंकि इसने एक के बाद एक बहुत बड़े संकट का सामना किया, जिसके कारण लोगों ने फेसबुक को डिलीट कर दिया। कैंब्रिज एनालिटिका मामले पर बैकलैश के बावजूद, फेसबुक के सीईओ मार्क जुकरबर्ग सोशल मीडिया प्लेटफॉर्म के भविष्य के प्रति आशावादी दृष्टिकोण के साथ आगे बढ़ रहे हैं। उन्होंन