C++23 जारी: नए मानक के प्रमुख बदलावों का अवलोकन
प्रोग्रामिंग भाषाओं की दुनिया में एक महत्वपूर्ण घटना घटी — अंतर्राष्ट्रीय C++ मानकीकरण समिति (ISO/IEC JTC1/SC22/WG21) ने आधिकारिक तौर पर भाषा के नए संस्करण को मंजूरी दी: C++23। यह रिलीज़, जो C++20 की जगह ले रहा है, क्रांतिकारी नहीं है, लेकिन इसमें कई लंबे समय से प्रतीक्षित और उपयोगी सुधार शामिल हैं जो कोड को साफ, सुरक्षित और अधिक कुशल बनाएंगे। आइए सबसे महत्वपूर्ण नवाचारों पर नज़र डालें।
C++23 की मुख्य नई विशेषताएं
1. std::print और std::println — cout का आधुनिक विकल्प
शायद रोज़मर्रा की प्रोग्रामिंग के लिए सबसे उल्लेखनीय बदलाव। मानक पुस्तकालय में std::print और std::println फ़ंक्शन जोड़े गए हैं, जो std::format (C++20) से शक्तिशाली फ़ॉर्मेटिंग पर आधारित हैं। अब कंसोल आउटपुट न केवल अधिक सुविधाजनक हो गया है, बल्कि std::cout की तुलना में काफी तेज़ भी है।
- उदाहरण:
std::println("नमस्ते, {}! उत्तर: {}", name, 42); - लाभ: टाइप-सुरक्षा, पढ़ने योग्य सिंटैक्स, Unicode समर्थन।
2. deducing this (P0847R7) — this का स्पष्ट निर्देश
मेटाप्रोग्रामिंग और लाइब्रेरी निर्माण के लिए सबसे शक्तिशाली नवाचारों में से एक। अब ऑब्जेक्ट this को सदस्य फ़ंक्शन के पैरामीटर के रूप में स्पष्ट रूप से पास किया जा सकता है। यह लैम्ब्डा और CRTP (Curiously Recurring Template Pattern) के साथ पुरानी समस्याओं को हल करता है।
- एक सदस्य फ़ंक्शन लिखने की अनुमति देता है जो const और non-const दोनों ऑब्जेक्ट्स के साथ काम करता है।
- "क्वालिफ़ायर ओवरलोडिंग" पैटर्न के कार्यान्वयन को सरल बनाता है।
3. बहुआयामी ऑपरेटर operator[] (P2128R6)
लंबे समय से प्रतीक्षित क्षमता — अब operator[] कई आर्गुमेंट ले सकता है। यह बहुआयामी सरणियों (जैसे mdspan या कस्टम मैट्रिक्स) के साथ काम करने वाली लाइब्रेरी के लिए महत्वपूर्ण है।
- पहले था:
matrix(2, 3)याmatrix[{2,3}] - अब है:
matrix[2, 3]— स्वाभाविक और संक्षिप्त।
4. std::expected — कार्यात्मक त्रुटि प्रबंधन
अपवादों और रिटर्न कोड का विकल्प। टाइप std::expected<T, E> में या तो सही मान होता है या त्रुटि। यह उन सिस्टम में विशेष रूप से मूल्यवान है जहां अपवाद प्रतिबंधित हैं (एम्बेडेड सिस्टम, OS कर्नेल)।
5. मॉड्यूल और कॉन्सेप्ट में सुधार
मॉड्यूल (C++20) में सुधार और स्थिरीकरण हुआ है। अब वे कंपाइलर द्वारा बेहतर समर्थित हैं। कॉन्सेप्ट अधिक लचीले हो गए हैं, कॉन्सेप्ट पैरामीटर में auto का उपयोग करने की क्षमता जोड़ी गई है।
और क्या उल्लेखनीय है?
std::mdspan— सरणियों के साथ काम करने के लिए बहुआयामी span।std::rangesमें सुधार — स्थिरीकरण और API में अंतराल को बंद करना।- विशेषता
[[assume]]— अनुकूलन के लिए कंपाइलर को संकेत। - स्टैटिक कॉल
operator()— क्षमता