मुझे अपवाद हैंडलिंग का उपयोग कब और कैसे करना चाहिए?


83

मैं अपवाद से निपटने के बारे में पढ़ रहा हूं। मुझे इस बारे में कुछ जानकारी मिली कि अपवाद क्या है, लेकिन मेरे कुछ प्रश्न हैं:

  1. अपवाद कब फेंकना है?
  2. एक अपवाद को फेंकने के बजाय, क्या हम त्रुटि को इंगित करने के लिए रिटर्न मान का उपयोग कर सकते हैं?
  3. यदि मैं अपने सभी कार्यों को आज़माता हूँ, तो क्या यह प्रदर्शन को कम करेगा?
  4. अपवाद हैंडलिंग का उपयोग कब करें?
  5. मैंने एक प्रोजेक्ट देखा, जहाँ उस प्रोजेक्ट के प्रत्येक फंक्शन में एक ट्राई-कैच ब्लॉक होता था (यानी पूरे फंक्शन के अंदर का कोड try-catch ब्लॉक से घिरा होता है)। क्या यह अच्छा अभ्यास है?
  6. ट्राइ-कैच और __try __except में क्या अंतर है?


आपको "जब एक अपवाद फेंकना है" से अधिक विशिष्ट प्रश्न पूछने की आवश्यकता होगी। जब कुछ असाधारण होता है तो आप एक अपवाद फेंक देते हैं।
फल्मरी डिक

मैंने PHP के सापेक्ष इस बारे में लिखा था, लेकिन मुझे लगता है कि C ++ पर सब कुछ लागू होता है। की जाँच करें ब्लॉग पोस्ट
ircmaxell

जवाबों:


96

यहाँ अपवादों पर काफी व्यापक गाइड है जो मुझे लगता है कि अवश्य पढ़ें:

अपवाद और त्रुटि से निपटने - C ++ FAQ या C ++ FAQ लाइट

अंगूठे के एक सामान्य नियम के रूप में, एक अपवाद को फेंक दें जब आपका कार्यक्रम बाहरी की पहचान कर सकता हैसमस्या जो निष्पादन को रोकती है। यदि आप सर्वर से डेटा प्राप्त करते हैं और वह डेटा अमान्य है, तो अपवाद को फेंक दें। डिस्क के स्थान से बाहर? एक अपवाद फेंक दें। कॉस्मिक किरणें डेटाबेस को क्वेरी करने से रोकती हैं? एक अपवाद फेंक दें। लेकिन अगर आपको अपने स्वयं के प्रोग्राम के अंदर से कुछ अमान्य डेटा मिलते हैं - तो अपवाद न फेंकें। यदि आपकी समस्या आपके स्वयं के खराब कोड से आती है, तो इसके खिलाफ बचाव के लिए ASSERTs का उपयोग करना बेहतर है। अपवाद हैंडलिंग को उन समस्याओं की पहचान करने की आवश्यकता होती है जो प्रोग्राम उपयोगकर्ता को संभाल नहीं सकते हैं और उन्हें उपयोगकर्ता के बारे में बता सकते हैं, क्योंकि उपयोगकर्ता उन्हें संभाल सकता है। लेकिन आपके प्रोग्राम में बग्स कुछ ऐसा नहीं है जिसे उपयोगकर्ता संभाल सकता है, इसलिए प्रोग्राम क्रैश करना "वैल्यू ऑफ answer_to_life_and_universe_and_everything 42 से कम नहीं है! यह 42 कभी नहीं होना चाहिए! अपवाद 11" अपवाद नहीं होना चाहिए।

एक अपवाद को पकड़ो जहां आप इसके साथ कुछ उपयोगी कर सकते हैं, जैसे, एक संदेश बॉक्स प्रदर्शित करें। मैं किसी फ़ंक्शन के अंदर एक बार एक अपवाद को पकड़ना पसंद करता हूं जो किसी भी तरह से उपयोगकर्ता इनपुट को संभालता है। उदाहरण के लिए, उपयोगकर्ता "एनहाइलेट ऑल हुनम्स" बटन दबाता है, और annihilateAllHunamsClicked () फ़ंक्शन के अंदर "कोशिश नहीं कर सकता है" कहने के लिए ब्लॉक को पकड़ें। भले ही मानव जाति का सर्वनाश एक जटिल ऑपरेशन है जिसमें दर्जनों और दर्जनों कार्यों को कॉल करने की आवश्यकता होती है, केवल एक कोशिश है ... पकड़, क्योंकि उपयोगकर्ता के लिए यह एक परमाणु ऑपरेशन है - एक बटन क्लिक। हर फ़ंक्शन में अपवाद चेक बेमानी और बदसूरत हैं।

इसके अलावा, मैं RAII से परिचित होने की पर्याप्त अनुशंसा नहीं कर सकता - अर्थात, यह सुनिश्चित करने के लिए कि आरंभिक सभी डेटा स्वचालित रूप से नष्ट हो जाता है। और यह स्टैक पर जितना संभव हो सके शुरू करके प्राप्त किया जा सकता है, और जब आपको ढेर पर कुछ इनिशियलाइज़ करने की आवश्यकता होती है, तो किसी प्रकार के स्मार्ट पॉइंटर का उपयोग करें। जब एक अपवाद फेंका जाता है तो स्टैक पर आरंभिक सब कुछ अपने आप नष्ट हो जाएगा। यदि आप सी-स्टाइल डंबल पॉइंटर्स का उपयोग करते हैं, तो आप एक अपवाद को फेंकने पर मेमोरी लीक का जोखिम उठाते हैं, क्योंकि अपवाद पर उन्हें साफ करने के लिए कोई भी नहीं है (निश्चित रूप से, आप सी-स्टाइल पॉइंटर्स का उपयोग अपनी कक्षा के सदस्यों के रूप में कर सकते हैं, लेकिन सुनिश्चित करें कि वे हैं विध्वंसक में ध्यान रखा गया)।


उर मूल्यवान इनपुट के लिए धन्यवाद। > "एक्सेप्शन हैंडलिंग के लिए ऐसे प्रोग्राम्स की पहचान करने की आवश्यकता होती है जो प्रोग्राम को हैंडल नहीं कर सकते हैं और उन्हें उपयोगकर्ता के बारे में नहीं बता सकते हैं, क्योंकि उपयोगकर्ता> उन्हें संभाल सकता है" अपवाद को फेंकने के बजाय मैं त्रुटि मान वापस कर सकता हूं और कॉलिंग फ़ंक्शन में मैं त्रुटि की जांच कर सकता हूं। और एक संदेश प्रदर्शित करता है जो उपयोगकर्ता को इसे संभालने में मदद करेगा।
उमेश एमएस

इस खंड में विशेष रूप से तीसरे और चौथे कोड के स्निपेट्स पर अक्सर पूछे जाने वाले प्रश्नों पर एक नज़र डालें: parashift.com/c++-faq-lite/exception.html#faq-17.2 अपवाद महान हैं, क्योंकि वे आपकी त्रुटियों को किसी भी गहराई से सतह पर लाते हैं। कॉल स्टैक के ... यह ऐसा है जैसे कि त्रुटि कोड
बाथिस्फ़ेयर

2
@Septagram "यदि आपकी समस्या आपके स्वयं के खराब कोड से आती है, तो इसके खिलाफ सुरक्षा के लिए ASSERTs का उपयोग करना बेहतर है।": एक मुखर आपको उन कार्यों के साथ जारी रखने की अनुमति नहीं देगा जो बगगी शाखा पर भरोसा नहीं करते हैं (सिर्फ इसलिए कि आपके कार्यक्रम में है एक फ़ंक्शन में बग का मतलब यह नहीं है कि यह अन्य उपयोगी चीजें नहीं कर सकता)। यह आपको कस्टम लॉगर्स का उपयोग नहीं करने देगा। यह RAII का उपयोग करके आपके द्वारा लाभान्वित होने वाले विध्वंसक को बायपास करेगा (प्रोग्राम समाप्त होने से पहले आपकी फ़ाइल बफ़र्स को फ़्लश किया जाना चाहिए! बेहतर है कि उन विध्वंसक को fcloseतब तक छोड़ें नहीं !)। यह आपको पूर्ण स्टैकट्रेस नहीं देगा।
डेमोंसप्रिंग

RAII और "डम्ब पॉइंटर्स" के बारे में कुछ कहना। सिर्फ इसलिए कि आप "डंब पॉइंटर" का उपयोग करते हैं इसका मतलब यह नहीं है कि आप RAII का अनुसरण नहीं कर रहे हैं। याद रखें कि यह केवल तभी है जब आप सिस्टम संसाधनों को आवंटित करते हैं जो आपको यह सुनिश्चित करने की आवश्यकता होती है कि वे डीलॉलेटेड हैं। एक पॉइंटर एक स्टैक पर एक चर है जो एक मेमोरी एड्रेस रखता है। "डंब पॉइंटर" का उपयोग करने के लिए ऑब्जेक्ट एलोकेशन और इनिशियलाइज़ेशन की आवश्यकता नहीं है। एक "गूंगा पॉइंटर" बस किसी ऐसी वस्तु का पता रख सकता है जिसे अन्यत्र आवंटित किया गया है, और उपयोग करने के लिए पूरी तरह से ठीक है। (
प्रतियोगिता

आपके पास एक रेंडरर ऑब्जेक्ट हो सकता है जो डिस्प्ले में ऑब्जेक्ट के पते को डिस्प्ले में रखने के लिए डिस्प्ले में चीजों को आकर्षित करने के लिए रखता है, लेकिन आप स्मार्ट पॉइंटर का उपयोग नहीं कर सकते क्योंकि एक स्मार्ट पॉइंटर प्रदर्शन ऑब्जेक्ट को तब नष्ट कर देगा जब आप रेंडरर ऑब्जेक्ट को नष्ट कर देंगे , जो आप नहीं करना चाहते हैं। इस मामले में, या तो "डंब पॉइंटर" या एक संदर्भ जाने के एकमात्र तरीके हैं।
सीनियरमी

12

अपवाद विभिन्न परिस्थितियों में उपयोगी होते हैं।

सबसे पहले, कुछ कार्य हैं जहां पूर्व स्थिति की गणना करने की लागत इतनी अधिक है कि केवल गणना करना और एक अपवाद के साथ गर्भपात करना बेहतर है यदि यह पाया जाता है कि पूर्व स्थिति पूरी नहीं हुई है। उदाहरण के लिए, आप एक विलक्षण मैट्रिक्स को उल्टा नहीं कर सकते हैं, हालांकि यह गणना करने के लिए कि क्या यह एकवचन है जो आप निर्धारक की गणना करते हैं जो बहुत महंगा है: इसे किसी भी तरह से फ़ंक्शन के अंदर किया जा सकता है, इसलिए मैट्रिक्स को इनवर्ट करने और रिपोर्ट करने के लिए बस "एक कोशिश" करना है एक त्रुटि यदि आप एक अपवाद को फेंक कर नहीं कर सकते हैं। यह मूल रूप से नकारात्मक पूर्व शर्त उपयोग के रूप में एक अपवाद है

फिर ऐसे अन्य मामले हैं जहां आपका कोड पहले से ही जटिल है और कॉल चेन में त्रुटि की जानकारी देना मुश्किल है। यह आंशिक रूप से है क्योंकि C और C ++ ने डेटा संरचना मॉडल को तोड़ दिया है: अन्य, बेहतर तरीके हैं, लेकिन C ++ उनका समर्थन नहीं करता है (जैसे हास्केल में मोनड्स का उपयोग करना)। यह उपयोग मूल रूप से मैं इसे ठीक करने के लिए परेशान नहीं हो सकता, इसलिए मैं एक अपवाद फेंक दूंगा : इसका सही तरीका नहीं है, लेकिन यह व्यावहारिक है।

फिर अपवादों का मुख्य उपयोग होता है: यह रिपोर्ट करने के लिए कि बाह्य पूर्व-स्थितियां या अपरिवर्तनीयता, जैसे कि स्मृति या डिस्क स्थान जैसे पर्याप्त संसाधन उपलब्ध नहीं हैं। इस मामले में आप आमतौर पर कार्यक्रम, या इसके एक प्रमुख उपधारा को समाप्त कर देंगे, और अपवाद समस्या के बारे में जानकारी प्रसारित करने का एक अच्छा तरीका है। C ++ अपवाद को रिपोर्टिंग त्रुटियों के लिए डिज़ाइन किया गया था जो कार्यक्रम को जारी रखने से रोकते हैं

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

तो आप जो सबसे अच्छी चीज कर सकते हैं, वह अपवाद है, जब कोई वास्तविक त्रुटि होती है, और जब इससे निपटने का कोई और तरीका नहीं होता है और अपवाद को फेंकने के बिंदु के करीब पहुंच सकते हैं


15
क्या आप कुछ अपवादों / संदर्भों को जोड़ सकते हैं "अपवादों को संभालने के लिए जाना जाता है" और "सिद्धांतकारों ने अब बेहतर मॉडल विकसित किए हैं", कृपया?
जुराज ब्लाहो

1
एक महत्वपूर्ण बात जो अपवादों को पकड़ने के दौरान अक्सर जानी जाती है, लेकिन जिसके बारे में अधिकांश अपवाद कोई उपयोगी डेटा प्रदान नहीं करते हैं, यह है कि क्या अपवाद को फेंकने वाले कोड का सिस्टम की स्थिति पर कोई प्रभाव पड़ा है। क्या सैद्धांतिक रूप से कोई भी मॉडल इससे निपटता है?
सुपरकाट

@JurajBlaho मैंने उन लिंक / संदर्भों को खोजने की कोशिश की जिनके बारे में आप बिना सफलता के बात कर रहे हैं। क्या आप उन्हें अंत में जोड़ने के लिए उनके उत्तर को संपादित कर सकते हैं?
फोर्समैजिक

मैं उदाहरण # 1 और # 3 से सहमत हूं। हालांकि, मुझे लगता है कि यदि कोड बहुत जटिल है तो अपवाद को फेंकने के बारे में आपकी सोच शायद आपको कुछ रिफैक्टिंग की आवश्यकता होगी। यदि कोड ठीक से चल रहा है और यह वास्तव में अपवाद की तुलना में कम महंगा है, यह जांचने के लिए Assert एक अच्छा तरीका (और भी बेहतर) है। मैं पुस्तक से 2 अध्याय (मुखर प्रोग्रामिंग और कब अपवाद का उपयोग करने की सलाह देता हूं): इस विषय में रुचि रखने वाले किसी भी व्यक्ति के लिए व्यावहारिक प्रोग्रामर।
फोर्समैजिक

1
लिंक की कोई आवश्यकता नहीं है। दिमाग का इस्तेमाल करें। आप एक अपवाद फेंक सकते हैं जो पकड़ा नहीं गया है। यह बुरी बात है। गोटो से भी बदतर गोटो कम से कम हमेशा कहीं जाता है। स्टेटिक टाइपिंग अपवाद विनिर्देशों के साथ सामना नहीं कर सकता: कोई ऐसा सिस्टम नहीं है जहां पॉलीमॉर्फिक फ़ंक्शन में अपवाद विनिर्देश हो सकते हैं क्योंकि यह प्रकार चर के विशेष उदाहरण पर निर्भर है। नए C ++ मानक से हटाए गए इन पर ध्यान दें। नए मॉडल को "सीमांकित निरंतरता" कहा जाता है: en.wikipedia.org/wiki/Delimited_continuation
Yttrill

4

यदि आपकी समस्या आपके स्वयं के खराब कोड से आती है, तो इसके खिलाफ सुरक्षा के लिए ASSERT का उपयोग करना बेहतर है। अपवाद हैंडलिंग को उन समस्याओं की पहचान करने की आवश्यकता होती है जो प्रोग्राम उपयोगकर्ता को संभाल नहीं सकते हैं और उन्हें उपयोगकर्ता के बारे में बता सकते हैं, क्योंकि उपयोगकर्ता उन्हें संभाल सकता है। लेकिन आपके प्रोग्राम में बग कुछ ऐसा नहीं है जिसे उपयोगकर्ता संभाल सकता है, इसलिए प्रोग्राम क्रैश होने से ज्यादा कुछ नहीं होगा

मैं स्वीकृत उत्तर के इस पहलू से असहमत हूं । एक अपवाद को फेंकने की तुलना में एक मुखर बेहतर नहीं है। यदि अपवाद केवल रन-टाइम त्रुटियों (या "बाहरी समस्याओं") के लिए उपयुक्त थे, तो इसके लिए क्या है std::logic_error?

एक तर्क त्रुटि लगभग उस प्रकार की स्थिति से होती है जो किसी प्रोग्राम को जारी रखने से रोकती है। यदि कार्यक्रम एक तार्किक निर्माण है, और उस तर्क के डोमेन के बाहर एक स्थिति होती है, तो यह कैसे जारी रह सकता है? जब आप कर सकते हैं, तो इनपुट इकट्ठा करो और एक अपवाद फेंक दो

ऐसा नहीं है कि पूर्व कला नहीं है। std::vectorनाम के लिए, लेकिन एक, एक तर्क त्रुटि अपवाद, अर्थात् फेंकता है std::out_of_range। यदि आप मानक पुस्तकालय का उपयोग करते हैं और मानक अपवादों को पकड़ने के लिए एक शीर्ष-स्तरीय हैंडलर नहीं है - यदि केवल कॉल करने के लिए क्या () और निकास (3) - तो आपके कार्यक्रम चुप, समाप्ति के अधीन हैं।

एक जोरदार मैक्रो एक बहुत कमजोर गार्ड है। कोई वसूली नहीं है। जब तक, कि, आप डिबग बिल्ड नहीं चला रहे हैं, जिस स्थिति में कोई निष्पादन नहीं है । अभिकथन मैक्रो उस युग का है जब गणना आज की तुलना में 6 धीमी परिमाण के आदेश थे। यदि आप तर्क त्रुटियों के लिए परीक्षण करने के लिए मुसीबत में जा रहे हैं, लेकिन उस परीक्षण का उपयोग करने के लिए नहीं जब यह मायने रखता है, उत्पादन में, आपको अपने कोड में बहुत अधिक विश्वास होगा!

मानक पुस्तकालय तर्क त्रुटि अपवादों के लिए प्रदान करता है, और उन्हें रोजगार देता है। वे एक कारण के लिए वहाँ हैं: क्योंकि तर्क त्रुटियां होती हैं, और असाधारण हैं। सिर्फ़ इसलिए कि सी सुविधाओं के दावे में इस तरह के एक आदिम (और, यकीनन, बेकार) तंत्र पर भरोसा करने का कोई कारण नहीं है, जब कोई अपवाद इतना बेहतर काम करता है।


3

इसके लिए बेस्ट पढ़ें

पिछले डेढ़ दशक में अपवाद से निपटने की बात की गई है। हालांकि, अपवादों को ठीक से कैसे संभालना है, इस पर एक आम सहमति के बावजूद, उपयोग पर एक विभाजन मौजूद है। अनुचित अपवाद हैंडलिंग आसानी से हाजिर है, बचने में आसान है, और एक सरल कोड (और डेवलपर) गुणवत्ता मीट्रिक है। मुझे पता है कि पूर्ण नियम बंद दिमाग या अतिरंजित के रूप में आते हैं, लेकिन एक सामान्य नियम के रूप में आपको कोशिश / पकड़ का उपयोग नहीं करना चाहिए

http://codebetter.com/karlseguin/2010/01/25/don-t-use-try-catch/


3
क्या वह लेख वास्तव में कहने की कोशिश नहीं कर रहा है, उपयोग नहीं try/ catch {}?
क्रेग मैकक्यून

2

1. कोई अपवाद जाँच कोड में शामिल है जब समस्या के बीच या कहीं और के रूप में एक अपवाद प्राप्त करने की संभावना है।

2. केवल उन मामलों के साथ प्रयास करें, जहां यह आवश्यक है। प्रत्येक ट्राइ-कैच ब्लॉक का उपयोग अतिरिक्त स्थिति की जांच में जोड़ता है जो निश्चित रूप से कोड के अनुकूलन को कम करता है।

3. मुझे लगता है कि _try_except एक वैध चर नाम है ...।


3
FYI करें, __try और __except Microsoft की संरचित अपवाद हैंडलिंग (SEH) के लिए हैं। msdn.microsoft.com/en-us/library/s58ftw19(v=vs.80).aspx
axw

0

आधारभूत अंतर है:

  1. आप के लिए एक त्रुटि से निपटने।
  2. एक आप अपने खुद के है।

    • उदाहरण के लिए, आपके पास एक अभिव्यक्ति हो सकती है 0 divide error1.जब त्रुटि हुई तो ट्रायल कैच का उपयोग करने से आपको मदद मिलेगी। या आपको एक की जरूरत if a==0 then..है2.

    • यदि आप अपवाद को पकड़ने की कोशिश नहीं करते हैं तो मुझे लगता है कि यह तेजी से नहीं लगता है, इसके बस बाईपास, अगर errorयह threwएक बाहरी हैंडलर के लिए होगा।

अपने आप को सौंपने का मतलब है कि समस्या आगे नहीं बढ़ेगी तो कई मामलों में गति में फायदा होगा, लेकिन हमेशा नहीं।

सुझाव: बस अपने आप को संभाल जब यह सरल और तार्किक मामले में।


-3

कई C / C ++ शुद्धतावादी अपवादों को पूरी तरह से हतोत्साहित करते हैं। मुख्य आलोचनाएँ हैं:

  1. यह धीमा है - बेशक यह वास्तव में "धीमा" नहीं है। हालांकि, शुद्ध सी / सी ++ की तुलना में, बहुत अधिक ओवरहेड है।
  2. यह बगों का परिचय देता है - यदि आप अपवादों को ठीक से नहीं संभालते हैं, तो आप फ़ंक्शन में क्लीन-अप कोड को छोड़ सकते हैं जो अपवाद को फेंकता है।

इसके बजाय, किसी फ़ंक्शन को कॉल करने पर हर बार रिटर्न मान / त्रुटि कोड जांचें।


15
बकवास। पहले, हम C ++ की बात कर रहे हैं - कोई "C / C ++" नहीं है, और निश्चित रूप से C-only प्रोग्रामर अपवादों के साथ असहज होंगे। "शुद्ध C / C ++" मौजूद नहीं है, और अपवाद "शुद्ध C ++" का एक हिस्सा हैं - वे मानक में हैं। आप छोटी गाड़ी अपवाद-हैंडलिंग कोड लिख सकते हैं, और आप छोटी गाड़ी त्रुटि-वापसी कोड, या छोटी गाड़ी त्रुटि-राज्य कोड लिख सकते हैं - यह सामान्य रूप से अधिक त्रुटि प्रवण होने के अलावा अपवादों को चिह्नित करने के लिए भ्रामक है। क्षमा करें, लेकिन यह कुछ सबसे खराब सलाह है जो मैंने SO
टोनी डेलारॉय

1
यदि आप चाहें तो मुझे नीचे चिह्नित करें, लेकिन सी पृष्ठभूमि से आने पर, मैं आपको बता सकता हूं कि खुद और कई अन्य लोग अपवादों का पूरी तरह से उपयोग करने से बचते हैं।
स्पीडप्लेन

4
1. यह केवल तब धीमा होता है जब अपवाद वास्तव में फेंक दिया जाता है। और अपवादों को अपवाद कहा जाता है, क्योंकि वे केवल असाधारण परिस्थितियों में फेंक दिए जाते हैं। प्रति सेकंड 9000 से अधिक अपवादों को फेंकने का कार्यक्रम गलत है। 2. यदि आप इस बात का ध्यान रखते हैं कि मेमोरी मैनेजमेंट को शुद्ध नए-डिलीट के साथ न करें, तो आपके लिए क्लीनअप किया जाएगा। C- शैली स्मृति प्रबंधन अपवादों की तुलना में कहीं अधिक त्रुटि-प्रवण है। 3. रिटर्न वैल्यू की जाँच करना कोड की बहुत सारी अतिरिक्त लाइनों को जोड़ता है, इस प्रकार यह कम पठनीय और कम रखरखाव योग्य बनाता है।
सेप्टग्राम

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

11 चढ़ाव और 8 उतार। मुझे लगता है कि यह स्पष्ट है कि जबकि यह राय आम सहमति को प्रतिबिंबित नहीं करती है, डेवलपर्स की एक बड़ी टुकड़ी है जो मेरे द्वारा वर्णित कारणों के अपवादों की चेतावनी दे रहे हैं।
स्पीड प्लेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.