C++17: क्या नया है? प्रोफेशनल्स के लिए उदाहरणों के साथ पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++17 क्या लाया? मानक की मुख्य नवीनताओं का विश्लेषण

\n\n

यदि आप C++ में लिखते हैं और मुख्यधारा में बने रहना चाहते हैं, तो C++17 वह संस्करण है जिसे अभी सीखना चाहिए। यह 2017 में आया था, लेकिन आज भी कई प्रोजेक्ट C++14 या C++11 पर अटके हुए हैं, नए मानक पर जाने से डरते हैं। और यह गलत है।

\n\n

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

\n\n

1. स्ट्रक्चर्ड बाइंडिंग्स (Structured Bindings) — एक सेकंड में डीकंपोज़िशन

\n\n

C++17 की सबसे सुविधाजनक विशेषताओं में से एक स्ट्रक्चर्ड बाइंडिंग्स है। पहले, टपल या पेयर को तोड़ने के लिए std::tie लिखना या इंडेक्स से एक्सेस करना पड़ता था। अब सब कुछ अधिक सुरुचिपूर्ण है।

\n\n

उदाहरण: फ़ंक्शन से कई मान लौटाना

\n\n
#include <iostream>\n#include <tuple>\n#include <string>\n\nstd::tuple<int, std::string, double> getData() {\n    return {42, "उत्तर", 3.14};\n}\n\nint main() {\n    // C++17: std::tie के बजाय एक पंक्ति\n    auto [id, name, value] = getData();\n    std::cout << name << ": " << id << " (" << value << ")\\n";\n    return 0;\n}
\n\n

क्या बदला? पहले वेरिएबल्स को अलग से घोषित करना होता था, फिर std::tie कॉल करना होता था। अब auto [a, b, c] आपके लिए सारा काम करता है।

\n\n

स्ट्रक्चर्ड बाइंडिंग्स न केवल टपल के साथ, बल्कि ऐरे और किसी भी ऐसी स्ट्रक्चर के साथ काम करती हैं जिनमें पब्लिक फील्ड हों। यह C++17 के नवाचारों में से एक है जो कोड को साफ और पढ़ने में आसान बनाता है।

\n\n

2. std::optional — "जादुई" मानों से छुटकारा

\n\n

आपने कितनी बार ऐसा कोड देखा है जहाँ फ़ंक्शन त्रुटि दर्शाने के लिए -1 या nullptr लौटाता है? या इससे भी बुरा — bool-फ़्लैग और रिफरेंस द्वारा परिणाम? std::optional<T> इस समस्या को हमेशा के लिए हल करता है।

\n\n

उदाहरण: कंटेनर में सुरक्षित खोज

\n\n
#include <iostream>\n#include <optional>\n#include <map>\n#include <string>\n\nstd::optional<int> findValue(const std::map<std::string, int>& m, const std::string& key) {\n    auto it = m.find(key);\n    if (it != m.end()) {\n        return it->second;  // मान मौजूद है\n    }\n    return std::nullopt;    // मान मौजूद नहीं है\n}\n\nint main() {\n    std::map<std::string, int> ages = {{"एलिस", 30}, {"बॉब", 25}};\n    \n    auto result = findValue(ages, "चार्ली");\n    if (result) {\n        std::cout << "मिला: " << *result << "\\n";\n    } else {\n        std::cout << "कुंजी नहीं मिली\\n";\n    }\n    \n    // या डिफ़ॉल्ट मान के लिए value_or का उपयोग करें\n    int age = result.value_or(0);\n    return 0;\n}
\n\n

std::optional एक कंटेनर है जो मान रख सकता है या खाली हो सकता है। आप इसे if (opt) के माध्यम से जाँचते हैं, और मान *opt या opt.value() के माध्यम से प्राप्त करते हैं। यह "समझौता" त्रुटि कोड से कहीं अधिक सुरक्षित है।

\n\n

3. if constexpr — बिना सिरदर्द के टेम्पलेट

\n\n

C++17 की नई क्षमताएँ मेटाप्रोग्रामिंग के लिए एक वरदान हैं। if constexpr SFINAE-एक्रोबैटिक्स के बिना टेम्पलेट्स के अंदर सशर्त कंपाइलेशन की अनुमति देता है।

\n\n

उदाहरण: विभिन्न प्रकारों के लिए सार्वभौमिक फ़ंक्शन

\n\n
#include <iostream>\n#include <type_traits>\n#include <string>\n\ntemplate <typename T>\nvoid printInfo(const T& value) {\n    if constexpr (std::is_integral_v<T>) {\n        std::cout << "पूर्णांक: " << value << "\\n";\n    } else if constexpr (std::is_floating_point_v<T>) {\n        std::cout << "फ़्लोटिंग पॉइंट संख्या:                

ब्लॉग

पुस्तक अनुशंसाएँ