C++ Academy · पाठ

noexcept विनिर्देशक

गैर-throwing फ़ंक्शन चिह्नित करें

पाठ 3, कुल 4 में से13 चरण

noexcept विनिर्देशक, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

noexcept क्या घोषित करता है

noexcept विनिर्देशक यह वादा करता है कि कोई फ़ंक्शन अपवाद नहीं उठाएगा। यदि वह फिर भी अपवाद उठाता है, तो प्रोग्राम std::terminate को कॉल करता है।

#include <iostream>

int square(int x) noexcept {
    return x * x;
}

int main() {
    std::cout << square(5) << "\n";
}

यह क्यों महत्वपूर्ण है

यह जानना कि कोई फ़ंक्शन अपवाद नहीं उठा सकता, कंपाइलर और पुस्तकालय को अनुकूलन करने देता है — उदाहरण के लिए, कंटेनर के बढ़ने के दौरान प्रतिलिपि के बजाय स्थानांतरण चुनना।

स्थानांतरण संचालन noexcept होने चाहिए

पुनःआवंटन करते समय std::vector आपके स्थानांतरण निर्माता का उपयोग तभी करता है जब वह noexcept हो; अन्यथा सुरक्षा के लिए वह प्रतिलिपि बनाता है। इसलिए स्थानांतरणों को noexcept चिह्नित करें।

struct Buffer {
    int* p;
    Buffer(Buffer&& o) noexcept : p(o.p) { o.p = nullptr; }
};

विनाशक डिफ़ॉल्ट रूप से noexcept होते हैं

C++11 से विनाशक अंतर्निहित रूप से noexcept होते हैं। किसी अपवाद को उनमें से बाहर निकलने देने पर प्रोग्राम समाप्त हो जाता है।

सशर्त noexcept

noexcept(expr) वादे को संकलन-समय के बूलियन मान पर निर्भर बनाता है — यह उन टेम्पलेटों में उपयोगी है जो किसी दूसरे प्रकार की गारंटी आगे भेजते हैं।

template <class T>
void swapValues(T& a, T& b) noexcept(noexcept(T(std::move(a)))) {
    T tmp = std::move(a);
    a = std::move(b);
    b = std::move(tmp);
}

noexcept संचालक से जाँच

संचालक के रूप में noexcept(expr) true देता है यदि अभिव्यक्ति को अपवाद न उठाने वाली घोषित किया गया हो — यह टेम्पलेटों में उपयोगी है।

#include <iostream>

int f() noexcept { return 1; }
int g() { return 2; }

int main() {
    std::cout << noexcept(f()) << " " << noexcept(g()) << "\n";  // 1 0
}

noexcept प्रकार का हिस्सा है

C++17 से noexcept फ़ंक्शन पॉइंटर के प्रकार का हिस्सा है, इसलिए अपवाद उठाने वाला फ़ंक्शन किसी noexcept पॉइंटर से बंध नहीं सकता।

अतिरिक्त वादा न करें

किसी फ़ंक्शन को noexcept तभी चिह्नित करें जब आपको पूरा विश्वास हो कि वह अपवाद नहीं उठा सकता। उल्लंघन किया गया झूठा वादा पूरे प्रोग्राम को क्रैश कर देता है।

उपयुक्त उम्मीदवार

अदला-बदली, स्थानांतरण, विनाशक, सरल मान-प्राप्तकर्ता और अंकगणितीय सहायक स्वाभाविक रूप से noexcept फ़ंक्शन होते हैं।

noexcept बनाम थ्रो()

पुराना गतिशील throw() विनिर्देशन अप्रचलित हो चुका है और हटा दिया गया है। आधुनिक C++ में इसके बजाय noexcept का उपयोग करें।

प्रदर्शन और सुरक्षा

noexcept उद्देश्य को दर्ज करने के साथ-साथ पुनःआवंटन पर स्थानांतरण जैसे अनुकूलन भी सक्षम करता है — वास्तविक प्रभाव वाला छोटा-सा annotation।

त्वरित जाँच

noexcept की अपनी समझ जाँचें।

पुनरावलोकन

आपने सीखा कि noexcept विनिर्देशक अपवाद न उठने का वादा करता है और पुनःआवंटन के दौरान स्थानांतरण जैसे अनुकूलन सक्षम करता है। स्थानांतरणों, अदला-बदली और विनाशकों को noexcept चिह्नित करें, टेम्पलेटों में सशर्त रूपों का उपयोग करें और कभी भी बढ़ा-चढ़ाकर वादा न करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “noexcept विनिर्देशक” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “noexcept विनिर्देशक” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“noexcept विनिर्देशक” में मैं क्या सीखूँगा?

गैर-throwing फ़ंक्शन चिह्नित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“noexcept विनिर्देशक” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. try, catch, throw
  2. अपवाद सुरक्षा
  3. noexcept विनिर्देशक
  4. कस्टम अपवाद प्रकार
← C++ Academy पर वापस जाएँ