<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on kenji.blog</title><link>http://kenji.blog/hi/tags/tech/</link><description>Recent content in Tech on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 02:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>【2026 संस्करण】C++26 की प्रमुख नई सुविधाएँ और व्यावहारिक उपयोग</title><link>http://kenji.blog/hi/p/cpp26-new-features-practical-guide/</link><pubDate>Sat, 12 Sep 2026 02:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/cpp26-new-features-practical-guide/</guid><description>&lt;img src="http://kenji.blog/p/cpp26-new-features-practical-guide/img/eyecatch.jpg" alt="Featured image of post 【2026 संस्करण】C++26 की प्रमुख नई सुविधाएँ और व्यावहारिक उपयोग" />&lt;h1 id="परचय-c26-दवर-लय-गय-अगल-पढ-क-परगरमग-परडइम-paradigm">परिचय: C++26 द्वारा लाया गया अगली पीढ़ी का प्रोग्रामिंग पैराडाइम (Paradigm)
&lt;/h1>&lt;p>2026 में, &lt;strong>C++26&lt;/strong> को आधिकारिक तौर पर मानकीकृत किया गया है, जो C++ के इतिहास में एक बहुत ही महत्वपूर्ण मील का पत्थर है। C++11 में &amp;ldquo;Modern C++&amp;rdquo; की अवधारणा के जन्म के बाद से, C++14, C++17, C++20 और C++23 के साथ इसका निरंतर विकास हुआ है, लेकिन C++26 भाषा सुविधाओं और मानक लाइब्रेरी दोनों में मेटाप्रोग्रामिंग (metaprogramming), त्रुटि प्रबंधन (error handling), और समवर्ती प्रसंस्करण (concurrent processing) के पारंपरिक ज्ञान को पूरी तरह से बदलकर एक शक्तिशाली पैराडाइम शिफ्ट (paradigm shift) लाता है।&lt;/p>
&lt;p>इस लेख में, हम C++26 में पेश की गई प्रमुख नई सुविधाओं, उनके तकनीकी विवरणों, संकलन (compile) समय के प्रदर्शन में सुधार, C++23 तक के मौजूदा कोड के साथ तुलना, और उनके व्यावहारिक उपयोगों के बारे में विस्तार से बताएंगे। यह 10,000 से अधिक वर्णों (characters) का एक व्यापक लेख है जो रिफ्लेक्शन (Reflection), कॉन्ट्रैक्ट प्रोग्रामिंग (Contracts), पैटर्न मैचिंग (Pattern Matching), पैक इंडेक्सिंग (Pack Indexing), स्ट्रक्चर्ड बाइंडिंग (Structured Bindings) के विस्तार, और Senders/Receivers सहित मानक लाइब्रेरी (standard library) के विकास को कवर करता है।&lt;/p>
&lt;p>सबसे पहले, आइए C++ के मानकीकरण के इतिहास और C++26 की स्थिति को दृष्टिगत रूप से देखें।&lt;/p>
&lt;div class="mermaid">timeline
title "C++ मानकीकरण विकास"
"C++11" : "Modern C++ की शुरुआत" : "auto, lambda, constexpr, move semantics"
"C++14" : "सुविधाओं का परिष्करण" : "generic lambda, return type deduction"
"C++17" : "व्यावहारिकता में सुधार" : "std::optional, fold expressions, structured binding"
"C++20" : "पैराडाइम शिफ्ट" : "Concepts, Modules, Coroutines, Ranges"
"C++23" : "और अधिक विस्तार" : "Deducing this, std::expected, std::print"
"C++26" : "अगली पीढ़ी की क्रांति" : "Reflection, Contracts, Pattern Matching"&lt;/div>
&lt;p>C++26 का उद्देश्य C++20 में पेश किए गए Concepts और Modules जैसी बड़े पैमाने की सुविधाओं के शीर्ष पर &lt;strong>कोड की स्व-वर्णनात्मकता (reflection)&lt;/strong> और &lt;strong>मज़बूती (contract programming)&lt;/strong> को उनकी सीमा तक बढ़ाना है। आइए प्रत्येक सुविधा के विवरण में गोता लगाएँ।&lt;/p>
&lt;hr>
&lt;h1 id="1-रफलकशन-static-reflection-मटपरगरमग-क-सचच-करत">1. रिफ्लेक्शन (Static Reflection): मेटाप्रोग्रामिंग की सच्ची क्रांति
&lt;/h1>&lt;p>यह कहना अतिशयोक्ति नहीं होगी कि C++26 की सबसे बड़ी विशेषता &lt;strong>स्टेटिक रिफ्लेक्शन (Static Reflection)&lt;/strong> है (मुख्य रूप से P2996 जैसे प्रस्तावों पर आधारित)। अब तक, C++ में प्रोग्राम के भीतर से किसी प्रकार (type) की संरचना या सदस्य चर (member variables) के बारे में जानकारी प्राप्त करने के लिए जटिल टेम्पलेट मेटाप्रोग्रामिंग (TMP) या मैक्रोज़ का भारी उपयोग करने की आवश्यकता होती थी। हालाँकि, C++26 के रिफ्लेक्शन तंत्र के साथ, अब संकलन (compile) समय पर प्रोग्राम की अपनी संरचना (AST: Abstract Syntax Tree की जानकारी) को सुरक्षित और सहज रूप से एक्सेस करना संभव है।&lt;/p>
&lt;h2 id="11-c23-तक-क-चनतय">1.1 C++23 तक की चुनौतियाँ
&lt;/h2>&lt;p>मान लीजिए कि आप C++23 या उससे पहले के संस्करण में किसी संरचना (struct) के सभी सदस्य चरों को JSON में क्रमित (serialize) करना चाहते हैं। चूँकि एक मानक भाषा सुविधा के रूप में संरचना के सदस्यों को सूचीबद्ध करने का कोई तरीका नहीं था, इसलिए आपको Boost.Describe या Boost.Pfr जैसी थर्ड-पार्टी लाइब्रेरीज़ का उपयोग करना पड़ता था, या सदस्यों को पंजीकृत करने के लिए अपने स्वयं के मैक्रोज़ को परिभाषित करना पड़ता था।&lt;/p>
&lt;p>इसके कारण संकलन समय (compile time) में वृद्धि हुई और त्रुटि संदेश (error messages) समझने में कठिन हो गए। गणितीय दृष्टिकोण से, पारंपरिक पुनरावर्ती (recursive) टेम्पलेट इंस्टेंटिएशन (instantiation) का उपयोग करके प्रकार की जानकारी का विश्लेषण करने पर, तत्वों की संख्या $N$ के लिए संकलन-समय की जटिलता (complexity) $O(N)$ होती थी, और जटिल मेटा-फ़ंक्शंस के लिए सबसे खराब स्थिति में $O(N^2)$ इंस्टेंटिएशन की आवश्यकता होती थी।&lt;/p>
$$
T_{\text{compile}}(N) \approx O(N^2) \quad \text{(Recursive Template Metaprogramming)}
$$
&lt;h2 id="12-c26-रफलकशन-सटकस-और-दषटकण">1.2 C++26 रिफ्लेक्शन सिंटैक्स और दृष्टिकोण
&lt;/h2>&lt;p>C++26 रिफ्लेक्शन &lt;code>^&lt;/code> ऑपरेटर (रिफ्लेक्शन ऑपरेटर) और &lt;code>[: ... :]&lt;/code> सिंटैक्स (स्प्लिसर) का उपयोग करता है। &lt;code>^T&lt;/code> का उपयोग प्रकारों (types) या चरों (variables) की &amp;ldquo;मेटा-जानकारी&amp;rdquo; प्राप्त करने के लिए किया जाता है, और इसे संकलन-समय के स्थिरांक (compile-time constant) &lt;code>std::meta::info&lt;/code> प्रकार के ऑब्जेक्ट के रूप में माना जाता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;meta&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">struct&lt;/span> &lt;span class="nc">User&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">id&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">name&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">email&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// C++26 के स्टेटिक रिफ्लेक्शन का उपयोग करके जेनेरिक सीरियलाइज़र
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">template&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">typename&lt;/span> &lt;span class="n">T&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="n">print_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">T&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">obj&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">constexpr&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">type_info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">^&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;{&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// संरचना के सदस्य की जानकारी प्राप्त करें और पुनरावृत्ति (iterate) करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">template&lt;/span> &lt;span class="nf">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">constexpr&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="nl">member&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">meta&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">nonstatic_data_members_of&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">type_info&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// [: member :] के साथ मूल प्रतीक (symbol) में विस्तार करें, और पहचानकर्ता (नाम) को स्ट्रिंग के रूप में प्राप्त करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">meta&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">identifier_of&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">member&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">: &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">obj&lt;/span>&lt;span class="p">.[&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nl">member&lt;/span>&lt;span class="p">:]&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;,&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">User&lt;/span> &lt;span class="n">u&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Alice&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;alice@example.com&amp;#34;&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">print_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">u&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस कोड में, &lt;code>User&lt;/code> संरचना के सभी सदस्यों को सूचीबद्ध करने के लिए &lt;code>template for&lt;/code> (संकलन-समय लूप अनरोलिंग) का उपयोग किया जाता है।&lt;/p>
&lt;h2 id="13-परदरशन-और-सकलन-समय-जटलत">1.3 प्रदर्शन और संकलन-समय जटिलता
&lt;/h2>&lt;p>इस नई सुविधा का सबसे बड़ा लाभ &lt;strong>संकलन समय में कमी&lt;/strong> है। चूँकि मेटा-जानकारी को सीधे कंपाइलर के भीतर हेरफेर किया जाता है, इसलिए तत्व का एक्सेस और पुनरावृत्ति $O(1)$ ओवरहेड के साथ संसाधित होती है। चूँकि इसका मूल्यांकन तुरंत एक स्थिर अभिव्यक्ति (constant expression) के रूप में किया जाता है, संकलन-समय की जटिलता में नाटकीय रूप से सुधार होता है।&lt;/p>
$$
T_{\text{compile\_new}}(N) = O(N) \quad \text{(Direct AST Traversal)}
$$
&lt;p>यह आपको नेस्टेड टेम्पलेट्स के कारण होने वाली कंपाइलर मेमोरी थकावट (memory exhaustion) और लंबे त्रुटि संदेशों (टेम्पलेट त्रुटियों का समुद्र) से मुक्त करता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["प्रकार (Type): User"] -->| "^User" | B["std::meta::info"]
B -->| "nonstatic_data_members_of" | C["meta::info की रेंज"]
C -->| "[: member :]" | D["सीधा सदस्य एक्सेस (obj.id, obj.name)"]
D --> E["उत्पन्न कोड (ज़ीरो ओवरहेड)"]&lt;/div>
&lt;hr>
&lt;h1 id="2-कनटरकट-परगरमग-contracts-मजबत-सफटवयर-डजइन">2. कॉन्ट्रैक्ट प्रोग्रामिंग (Contracts): मजबूत सॉफ्टवेयर डिज़ाइन
&lt;/h1>&lt;p>लंबे समय से चर्चा में रही &lt;strong>Contracts (कॉन्ट्रैक्ट प्रोग्रामिंग)&lt;/strong>, जिसे C++20 में शामिल करने से छोड़ दिया गया था, आखिरकार C++26 में पेश कर दी गई है (P2900 आदि के अनुसार)। &amp;ldquo;Design by Contract&amp;rdquo; पैराडाइम अब भाषा में अंतर्निहित रूप से समर्थित है, जिससे आप घोषणात्मक रूप से फ़ंक्शन की पूर्व-शर्तें (pre-conditions), पश्च-शर्तें (post-conditions) और दावे (assertions) लिख सकते हैं।&lt;/p>
&lt;h2 id="21-contracts-क-मल-सटकस">2.1 Contracts का मूल सिंटैक्स
&lt;/h2>&lt;p>C++26 में, फ़ंक्शन घोषणाओं में अनुबंध विशेषताएँ (contract attributes) जोड़ी जाती हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;code>pre&lt;/code> : वह शर्त जो फ़ंक्शन के कॉल होने से पहले पूरी होनी चाहिए&lt;/li>
&lt;li>&lt;code>post&lt;/code> : वह शर्त जो फ़ंक्शन के समाप्त होने और मान वापस करने पर पूरी होनी चाहिए&lt;/li>
&lt;li>&lt;code>assert&lt;/code> : वह शर्त जो फ़ंक्शन के भीतर एक विशिष्ट बिंदु पर पूरी होनी चाहिए&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;vector&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;numeric&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// कॉन्ट्रैक्ट प्रोग्रामिंग के माध्यम से सुरक्षित औसत गणना
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// पूर्व-शर्त: पास किया गया वेक्टर खाली नहीं होना चाहिए
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// पश्च-शर्त: गणना किया गया औसत वेक्टर के न्यूनतम मान से अधिक या उसके बराबर और अधिकतम मान से कम या उसके बराबर होना चाहिए
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">double&lt;/span> &lt;span class="nf">calculate_average&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pre&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">post&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nl">r&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">min_element&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">begin&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">max_element&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">begin&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="p">()))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">double&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">accumulate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">begin&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="mf">0.0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">double&lt;/span> &lt;span class="n">avg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// प्रोसेसिंग के दौरान दावा (assertion)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">assert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">avg&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">avg&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// NaN की जाँच आदि
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">avg&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// पश्च-शर्त के &amp;#39;r&amp;#39; से बँधा हुआ (bound) है
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="22-कनटरकट-उललघन-क-सभलन-और-रनटइम-मलयकन">2.2 कॉन्ट्रैक्ट उल्लंघन को संभालना और रनटाइम मूल्यांकन
&lt;/h2>&lt;p>Contracts केवल टिप्पणियाँ (comments) या पुराने &lt;code>assert()&lt;/code> मैक्रोज़ नहीं हैं। बिल्ड मोड (जैसे, विकास बिल्ड, उत्पादन बिल्ड) के आधार पर, आप कंपाइलर को निर्देश दे सकते हैं कि &lt;strong>उल्लंघन होने पर कैसे व्यवहार करें&lt;/strong>। उदाहरण के लिए, विकास (development) के दौरान, आप उल्लंघन पर तुरंत क्रैश (abort) कर सकते हैं, जबकि उत्पादन (production) वातावरण में, आप एक कस्टम उल्लंघन हैंडलर को कॉल कर सकते हैं जो त्रुटि को लॉग करता है और निष्पादन जारी रखता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["फ़ंक्शन कॉल किया गया"] --> B{"पूर्व-शर्त का मूल्यांकन करें"}
B -- "True" --> C["बॉडी निष्पादित करें"]
B -- "False" --> D["उल्लंघन हैंडलर को लागू करें"]
D --> E["त्रुटि लॉग करें / निरस्त करें / फेंकें (Throw)"]
C --> F{"पश्च-शर्त का मूल्यांकन करें"}
F -- "True" --> G["मान लौटाएं"]
F -- "False" --> D&lt;/div>
&lt;p>Contracts का उपयोग करने से न केवल API के विनिर्देश (specifications) का स्व-दस्तावेजीकरण होता है, बल्कि अपरिभाषित व्यवहार (Undefined Behavior, UB) होने से पहले प्रोग्राम को सुरक्षित रूप से रोका और नियंत्रित किया जा सकता है, जिससे C++ के विशिष्ट मेमोरी भ्रष्टाचार (memory corruption) बग और तार्किक (logical) बग में भारी कमी आने की उम्मीद है।&lt;/p>
&lt;hr>
&lt;h1 id="3-पटरन-मचग-pattern-matching-शखओ-branching-क-परषकरण">3. पैटर्न मैचिंग (Pattern Matching): शाखाओं (Branching) का परिष्करण
&lt;/h1>&lt;p>चूँकि C++17 में &lt;code>std::variant&lt;/code> और &lt;code>std::any&lt;/code> पेश किए गए थे, &lt;code>std::visit&lt;/code> का उपयोग विभिन्न प्रकार रखने वाले चरों को डिस्पैच करने के लिए किया जाता रहा है। हालाँकि, &lt;code>std::visit&lt;/code> और ओवरलोड पैटर्न (तथाकथित &lt;code>overloaded&lt;/code> स्ट्रक्चर हैक) का संयोजन बहुत ही जटिल और पढ़ने में कठिन था।&lt;/p>
&lt;p>C++26 में, &lt;strong>पैटर्न मैचिंग (Pattern Matching)&lt;/strong> को भाषा की सुविधा के रूप में बनाया गया है (P2688 के अनुसार)। यह फ़ंक्शनल भाषाओं (जैसे Rust और Haskell) के समान सहज मैचिंग की अनुमति देता है।&lt;/p>
&lt;h2 id="31-c23-तक-stdvisit-क-सघरष">3.1 C++23 तक &lt;code>std::visit&lt;/code> का संघर्ष
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// C++23 तक सिंटैक्स
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">template&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">class&lt;/span>&lt;span class="err">... &lt;/span>&lt;span class="nc">Ts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="nc">overloaded&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">Ts&lt;/span>&lt;span class="p">...&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">using&lt;/span> &lt;span class="n">Ts&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="k">operator&lt;/span>&lt;span class="p">()...;&lt;/span> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">template&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">class&lt;/span>&lt;span class="err">... &lt;/span>&lt;span class="nc">Ts&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">overloaded&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Ts&lt;/span>&lt;span class="p">...)&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">overloaded&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Ts&lt;/span>&lt;span class="p">...&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">variant&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;Hello&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">visit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">overloaded&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[](&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Int: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[](&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;String: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">s&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[](&lt;/span>&lt;span class="kt">double&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Double: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">},&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="32-c26-क-inspect-सटकस-क-सथ-नटकय-सधर">3.2 C++26 के &lt;code>inspect&lt;/code> सिंटैक्स के साथ नाटकीय सुधार
&lt;/h2>&lt;p>नए &lt;code>inspect&lt;/code> कीवर्ड का उपयोग करके, आप इसे बहुत ही साफ तरीके से लिख सकते हैं, जैसा कि नीचे दिखाया गया है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// C++26 पैटर्न मैचिंग
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">variant&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;Hello&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">inspect&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Int: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">s&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;String: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">s&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">double&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Double: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Unknown type&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// वाइल्डकार्ड (Wildcard)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>यह पैटर्न मैचिंग न केवल प्रकार के प्रेषण (type dispatching) तक सीमित है, बल्कि &lt;strong>संरचनाओं के डीस्ट्रक्चरिंग (destructuring)&lt;/strong> और &lt;strong>गार्ड शर्तों&lt;/strong> (केवल तभी मेल खाता है जब कोई विशिष्ट शर्त पूरी होती है) का भी समर्थन करता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">struct&lt;/span> &lt;span class="nc">Point&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">variant&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Point&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">var&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">inspect&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// संरचना के तत्वों को बांधते हुए गार्ड शर्त (if) जोड़ें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">as&lt;/span> &lt;span class="n">Point&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Diagonal: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">as&lt;/span> &lt;span class="n">Point&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Point: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;, &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Scalar: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>कंपाइलर इस &lt;code>inspect&lt;/code> कथन के लिए संपूर्णता जाँच (exhaustiveness checking) करता है, इसलिए यदि एनम (enum) या &lt;code>std::variant&lt;/code> को संसाधित करते समय कोई भी स्थिति (case) छूट जाती है, तो इसे संकलन त्रुटि (compile error) के रूप में रिपोर्ट किया जाएगा। रखरखाव (maintainability) में सुधार के लिए यह अत्यंत महत्वपूर्ण है।&lt;/p>
&lt;hr>
&lt;h1 id="4-पक-इडकसग-pack-indexing-टमपलट-परमटर-पक-क-बचव">4. पैक इंडेक्सिंग (Pack Indexing): टेम्पलेट पैरामीटर पैक का बचाव
&lt;/h1>&lt;p>C++11 के बाद से वैराडिक टेम्पलेट्स (Variadic Templates) बहुत शक्तिशाली रहे हैं, लेकिन पैरामीटर पैक से $N$ वां प्रकार या मान निकालने का कार्य सहज नहीं था। अब तक, आपके पास &lt;code>std::tuple_element&lt;/code> या पुनरावर्ती (recursive) टेम्पलेट्स का उपयोग करके उन्हें निकालने के अलावा कोई विकल्प नहीं था।&lt;/p>
&lt;p>C++26 में, &lt;strong>पैक इंडेक्सिंग&lt;/strong> सुविधा (P2662) पेश की गई है, जो आपको सरणी अनुक्रमणिका (array index) पहुँच की तरह इसे अधिक स्वाभाविक रूप से लिखने की अनुमति देती है।&lt;/p>
&lt;h2 id="41-पक-इडकसग-क-मल-ततव">4.1 पैक इंडेक्सिंग के मूल तत्व
&lt;/h2>&lt;p>सिंटैक्स बहुत सरल है, इसे &lt;code>Types...[I]&lt;/code> के रूप में लिखा जाता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;type_traits&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Nवां प्रकार (type) प्राप्त करने का फ़ंक्शन
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">template&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">size_t&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span>&lt;span class="p">...&lt;/span> &lt;span class="n">Types&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">constexpr&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">get_nth_type&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Types...[N] के साथ Nवें प्रकार तक सीधे पहुँचें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">Types&lt;/span>&lt;span class="p">...[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="p">]{};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// वैराडिक तर्कों (arguments) का Nवां मान प्राप्त करने का फ़ंक्शन
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">template&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">size_t&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span>&lt;span class="p">...&lt;/span> &lt;span class="n">Args&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">constexpr&lt;/span> &lt;span class="k">decltype&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">auto&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">get_nth_value&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Args&lt;/span>&lt;span class="o">&amp;amp;&amp;amp;&lt;/span>&lt;span class="p">...&lt;/span> &lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// पैरामीटर पैक args के लिए भी इंडेक्स एक्सेस संभव है
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">forward&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Args&lt;/span>&lt;span class="p">...[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">...[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// प्रकार (type) तक पहुँचना
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">using&lt;/span> &lt;span class="n">SecondType&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">decltype&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">get_nth_type&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">double&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">char&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">static_assert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">is_same_v&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">SecondType&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// मान (value) तक पहुँचना
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">val&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_nth_value&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Hello C++26&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sc">&amp;#39;c&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">val&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// आउटपुट होगा &amp;#34;Hello C++26&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>कंपाइलर अब स्थिर समय $O(1)$ में पैक अनुक्रमणिका को संसाधित कर सकता है, जिससे पहले नेस्टेड मेटा-फ़ंक्शंस के कारण होने वाले लंबे संकलन समय को कम किया जा सकता है।&lt;/p>
&lt;hr>
&lt;h1 id="5-सटरकचरड-बइडग-structured-bindings-क-वसतर">5. स्ट्रक्चर्ड बाइंडिंग (Structured Bindings) का विस्तार
&lt;/h1>&lt;p>C++17 में पेश की गई स्ट्रक्चर्ड बाइंडिंग फ़ंक्शन से एकाधिक रिटर्न मान (return values) प्राप्त करते समय बहुत उपयोगी होती है। हालाँकि, यदि आप केवल कुछ चरों का उपयोग करना चाहते थे और अन्य को अनदेखा करना चाहते थे, तो आपको डमी चर (dummy variables) परिभाषित करने की आवश्यकता थी, और &amp;ldquo;अप्रयुक्त चर (unused variable)&amp;rdquo; चेतावनी से बचने में परेशानी होती थी।&lt;/p>
&lt;p>C++26 में, प्लेसहোল्डर के रूप में &lt;code>_&lt;/code> (अंडरस्कोर) का उपयोग करने की आधिकारिक अनुमति दी गई है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;map&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">map&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">get_data&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">{{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;One&amp;#34;&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Two&amp;#34;&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Three&amp;#34;&lt;/span>&lt;span class="p">}};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">auto&lt;/span> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_data&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="k">auto&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// मानों (स्ट्रिंग) को अनदेखा करें और केवल कुंजियों (ID) का उपयोग करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;ID: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">id&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sc">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>यह छोटा सा विस्तार कोड के इरादे को स्पष्ट करता है और &lt;code>#pragma&lt;/code> या &lt;code>[[maybe_unused]]&lt;/code> विशेषताओं के अत्यधिक उपयोग को रोकता है जो अनावश्यक चेतावनियों को दबाने के लिए इस्तेमाल होते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="6-मनक-लइबरर-standard-library-क-वकस-समवरत-परससकरण-और-अतलयकलक-asynchronous-क-पनररचन">6. मानक लाइब्रेरी (Standard Library) का विकास: समवर्ती प्रसंस्करण और अतुल्यकालिक (Asynchronous) की पुनर्रचना
&lt;/h1>&lt;p>केवल भाषा सुविधाएँ ही नहीं, बल्कि C++26 की मानक लाइब्रेरी (STL) भी नाटकीय रूप से विकसित हुई है। विशेष रूप से अतुल्यकालिक प्रसंस्करण (asynchronous processing) और मेमोरी प्रबंधन के क्षेत्र में, उद्यम और सिस्टम प्रोग्रामिंग की मांगों को पूरा करने के लिए उन्नत घटक पेश किए गए हैं।&lt;/p>
&lt;h2 id="61-senders--receivers-stdexecution">6.1 Senders / Receivers (std::execution)
&lt;/h2>&lt;p>C++ के अतुल्यकालिक प्रसंस्करण मॉडल को पूरी तरह से फिर से बनाने का मानकीकरण प्रस्ताव (P2300) आखिरकार C++26 में फलीभूत हुआ। &lt;code>std::async&lt;/code> और &lt;code>std::future&lt;/code> के प्रदर्शन संबंधी मुद्दों (अत्यधिक मेमोरी आवंटन और शेड्यूलिंग अकुशलता) को हल करने के लिए &lt;strong>Senders/Receivers&lt;/strong> मॉडल पेश किया गया है।&lt;/p>
&lt;div class="mermaid">graph LR
S["सेंडर (कार्य विवरण)"] -->|connect| O["ऑपरेशन स्टेट"]
O -->|start| E["निष्पादन (थ्रेडपूल, GPU, आदि)"]
E -->|set_value / set_error / set_stopped| R["रिसीवर (कॉल बैक)"]&lt;/div>
&lt;p>Senders हल्के ब्लूप्रिंट (blueprint) होते हैं जो वर्णन करते हैं कि &amp;ldquo;क्या करना है&amp;rdquo; और निष्पादन संदर्भ (Scheduler) से अलग होते हैं। यह सीपीयू (CPU) के थ्रेडपूल (ThreadPool) या जीपीयू (GPU) पर कार्यों को ऑफलोड करने को एक एकीकृत इंटरफ़ेस के साथ कुशलतापूर्वक वर्णित करने की अनुमति देता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;execution&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;syncstream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">execution&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">auto&lt;/span> &lt;span class="n">scheduler&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_system_thread_pool&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">scheduler&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// टास्क पाइपलाइन (इस बिंदु पर निष्पादित नहीं होता है: लेज़ी इवैल्यूएशन)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">task&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">schedule&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">scheduler&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">then&lt;/span>&lt;span class="p">([]&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">42&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">then&lt;/span>&lt;span class="p">([](&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">val&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">val&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">|&lt;/span> &lt;span class="n">upon_error&lt;/span>&lt;span class="p">([](&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">exception_ptr&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// sync_wait के साथ समकालिक (synchronously) रूप से परिणाम की प्रतीक्षा करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sync_wait&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">task&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">value&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">osyncstream&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;Result: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="62-hazard-pointers-और-rcu-read-copy-update">6.2 Hazard Pointers और RCU (Read-Copy Update)
&lt;/h2>&lt;p>&lt;strong>Hazard Pointers&lt;/strong> (&lt;code>std::hazard_pointer&lt;/code>) और &lt;strong>RCU&lt;/strong> (&lt;code>std::rcu&lt;/code>) को लॉक-फ्री (lock-free) डेटा संरचनाओं के कार्यान्वयन का समर्थन करने के लिए मानक सुविधाओं के रूप में मानकीकृत किया गया है। इसने C++ में उच्च-प्रदर्शन समवर्ती डेटा संरचनाओं (concurrent data structures) को लागू करने की बाधा को काफी कम कर दिया है।&lt;/p>
&lt;p>RCU विशेष रूप से उन वर्कलोड में जहाँ रीड्स (पढ़ना) भारी मात्रा में होते हैं, कैश-लाइन विवाद को समाप्त करता है और एक रैखिक स्केलेबिलिटी (linear scalability) प्राप्त करता है। गणितीय रूप से, थ्रेड्स की संख्या $T$ के लिए रीड थ्रूपुट (read throughput) आदर्श रूप से $O(T)$ की वृद्धि को दर्शाता है।&lt;/p>
$$
\text{Throughput}_{\text{RCU}} \propto T \quad \text{(Read-heavy Workloads)}
$$
&lt;hr>
&lt;h1 id="7-वयवहरक-परवसन-मरगदरशक-practical-migration-guide-और-इस-अपनन-क-लभ">7. व्यावहारिक प्रवासन मार्गदर्शिका (Practical Migration Guide) और इसे अपनाने के लाभ
&lt;/h1>&lt;p>C++26 में प्रवासन (migration) के लिए C++11 के समान बड़े पैमाने पर पैराडाइम शिफ्ट की आवश्यकता होती है, लेकिन इसके लाभों में कोडबेस सुरक्षा और संकलन समय में महत्वपूर्ण सुधार शामिल हैं।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>मेटाप्रोग्रामिंग का नवीनीकरण&lt;/strong>: जटिल &lt;code>template&lt;/code> और &lt;code>constexpr if&lt;/code> के नेस्टिंग से बने सीरियलाइज़र या ORM (Object-Relational Mapping) फ्रेमवर्क को C++26 रिफ्लेक्शन के साथ फिर से लिखा जा सकता है, जिससे रखरखाव में नाटकीय रूप से सुधार हो सकता है और संकलन समय दसियों गुना कम हो सकता है।&lt;/li>
&lt;li>&lt;strong>Contracts के साथ API डिज़ाइन&lt;/strong>: क्लास लाइब्रेरी के डिज़ाइनरों को Doxygen जैसी दस्तावेज़ीकरण टिप्पणियों (documentation comments) पर निर्भर रहने के बजाय भाषा स्तर पर विनिर्देशों (specifications) को स्पष्ट करने के लिए Contracts (&lt;code>pre&lt;/code> / &lt;code>post&lt;/code>) का उपयोग करना चाहिए। यह उपयोगकर्ताओं द्वारा अमान्य कॉल्स का शीघ्र पता लगाने की अनुमति देता है।&lt;/li>
&lt;li>&lt;strong>अतुल्यकालिक प्रसंस्करण (Asynchronous processing) का आधुनिकीकरण&lt;/strong>: कस्टम कार्यान्वयन या Boost.Asio पर निर्भर अतुल्यकालिक प्रसंस्करण को &lt;code>std::execution&lt;/code> (Senders/Receivers) में स्थानांतरित करने से आप एक मानकीकृत समवर्ती प्रसंस्करण आधार (concurrent processing foundation) का निर्माण कर सकते हैं जो प्लेटफ़ॉर्म और हार्डवेयर के पार काम करता है।&lt;/li>
&lt;/ol>
&lt;h2 id="परवसन-करत-समय-धयन-दन-यगय-बत-abi-सथरत-और-कपइलर-समरथन">प्रवासन करते समय ध्यान देने योग्य बातें: ABI स्थिरता और कंपाइलर समर्थन
&lt;/h2>&lt;p>नई भाषा सुविधाएँ, विशेष रूप से Contracts, फ़ंक्शन हस्ताक्षर (function signatures) और ABI (Application Binary Interface) को प्रभावित कर सकती हैं। इसलिए, यदि आप उन्हें साझा पुस्तकालयों (shared libraries - DLL / .so) की सीमाओं के पार उपयोग करते हैं, तो आपको यह सुनिश्चित करने के लिए दृढ़ता से जांच करने की आवश्यकता है कि वे एक ही कंपाइलर और मानक लाइब्रेरी संस्करण (GCC, Clang, MSVC) के साथ संकलित (compiled) किए गए हैं।&lt;/p>
&lt;hr>
&lt;h1 id="नषकरष">निष्कर्ष
&lt;/h1>&lt;p>C++26 वास्तव में एक ऐतिहासिक संस्करण है जहाँ उन सभी &amp;ldquo;सपनों की सुविधाओं&amp;rdquo; को एक साथ पेश किया गया है जिनका C++ प्रोग्रामर लंबे समय से इंतजार कर रहे थे।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>रिफ्लेक्शन&lt;/strong> मेटाप्रोग्रामिंग की जटिलता को दूर करता है और $O(1)$ AST एक्सेस को सक्षम बनाता है।&lt;/li>
&lt;li>&lt;strong>कॉन्ट्रैक्ट प्रोग्रामिंग&lt;/strong> आपको फ़ंक्शन की पूर्व-शर्तों और पश्च-शर्तों को स्पष्ट करके मज़बूत प्रोग्राम बनाने की अनुमति देती है।&lt;/li>
&lt;li>&lt;strong>पैटर्न मैचिंग&lt;/strong> जटिल शाखाओं (branching) और राज्य संक्रमण (state transitions) को सहज और सुरक्षित रूप से वर्णित करने में मदद करती है।&lt;/li>
&lt;li>&lt;strong>Senders/Receivers&lt;/strong> और &lt;strong>RCU / Hazard Pointers&lt;/strong> समवर्ती प्रसंस्करण (concurrent processing) का मानकीकरण करते हैं जो चरम प्रदर्शन को प्राप्त करता है।&lt;/li>
&lt;/ul>
&lt;p>इन सुविधाओं का उचित रूप से उपयोग करके, आप C++ की सबसे बड़ी ताकत, &amp;ldquo;शून्य-ओवरहेड अमूर्तता (Zero-overhead Abstraction)&amp;rdquo; को उच्च स्तर पर और आश्चर्यजनक रूप से साफ कोड के साथ प्राप्त कर सकते हैं।&lt;/p>
&lt;p>भविष्य में, हम प्रत्येक कंपाइलर वेंडर की C++26 सुविधा कार्यान्वयन स्थिति (फ़ीचर टेस्ट मैक्रोज़, आदि) पर कड़ी नज़र रखते हुए नए प्रोजेक्ट्स और लाइब्रेरी के विकास में इन नए पैराडाइम को सक्रिय रूप से शामिल करने की सलाह देते हैं। C++ कभी भी पुरानी भाषा नहीं है, और यह अपनी सबसे उन्नत भाषा सिद्धांतों को अपनाते हुए सिस्टम प्रोग्रामिंग के शीर्ष पर राज करना जारी रखेगी।&lt;/p>
&lt;hr>
&lt;p>&lt;em>यह लेख 2026 तक C++26 के मानकीकरण की स्थिति पर आधारित है। कृपया ध्यान दें कि प्रत्येक कंपाइलर की कार्यान्वयन स्थिति के आधार पर कुछ सिंटैक्स बदल सकते हैं&lt;/em>&lt;/p></description></item></channel></rss>