एक इनबिल्ट फ़ंक्शन पर नो थ्रो स्पेसिफिकेशन जो केवल एक सदस्य चर देता है और संभवतः अपवादों को फेंक नहीं सकता है कुछ कंपाइलरों द्वारा उपयोग किया जा सकता है निराशा के लिए (अनुकूलन के विपरीत एक बना-बनाया शब्द) जो प्रदर्शन पर हानिकारक प्रभाव डाल सकता है। यह बूस्ट साहित्य: अपवाद-विनिर्देश में वर्णित है
कुछ कंपाइलर्स के साथ नॉन-इनलाइन फ़ंक्शंस पर नो-थ्रो विनिर्देशन फायदेमंद हो सकता है यदि सही अनुकूलन किया जाता है और उस फ़ंक्शन का उपयोग इस तरह से प्रदर्शन को प्रभावित करता है कि वह इसे सही ठहराता है।
मेरे लिए यह लगता है कि क्या इसका उपयोग करना है या नहीं, एक प्रदर्शन अनुकूलन प्रयास के भाग के रूप में एक बहुत ही महत्वपूर्ण आंख द्वारा किया गया कॉल है, शायद प्रोफाइल टूल का उपयोग करके।
जल्दी में उन लोगों के लिए उपरोक्त लिंक का एक उद्धरण ( एक भोले संकलक से एक इनलाइन समारोह पर फेंक फेंक को निर्दिष्ट करने के बुरे अनपेक्षित प्रभावों का एक उदाहरण है ):
अपवाद-विनिर्देश तर्क
अपवाद विनिर्देशों [आईएसओ 15.4] को कभी-कभी यह इंगित करने के लिए कोडित किया जाता है कि अपवाद क्या फेंका जा सकता है, या क्योंकि प्रोग्रामर को उम्मीद है कि वे प्रदर्शन में सुधार करेंगे। लेकिन एक स्मार्ट पॉइंटर से निम्नलिखित सदस्य पर विचार करें:
टी एंड ऑपरेटर * () कास्ट थ्रो () {रिटर्न * पीटीआर; }
यह फ़ंक्शन कोई अन्य फ़ंक्शन नहीं कहता है; यह केवल बिंदुओं जैसे मूलभूत डेटा प्रकारों में हेरफेर करता है इसलिए, अपवाद-विनिर्देश का कोई रनटाइम व्यवहार कभी भी लागू नहीं किया जा सकता है। फ़ंक्शन पूरी तरह से कंपाइलर के संपर्क में है; वास्तव में इसे इनलाइन घोषित किया गया है। इसलिए, एक स्मार्ट कंपाइलर आसानी से यह कह सकता है कि फ़ंक्शन अपवादों को फेंकने में असमर्थ हैं, और वही अनुकूलन करें जो खाली अपवाद-विनिर्देश के आधार पर किए गए थे। एक "गूंगा" संकलक, हालांकि, सभी प्रकार के निराशावाद कर सकता है।
उदाहरण के लिए, कुछ कंपाइलर अपवाद-विनिर्देश होने पर, इनलाइनिंग को बंद कर देते हैं। कुछ संकलक प्रयास / पकड़ ब्लॉक जोड़ते हैं। इस तरह की निराशा एक प्रदर्शन आपदा हो सकती है जो व्यावहारिक अनुप्रयोगों में कोड को अनुपयोगी बनाती है।
हालांकि शुरू में अपील करने के लिए, एक अपवाद-विनिर्देश के परिणाम होते हैं जिन्हें समझने के लिए बहुत सावधानी से सोचने की आवश्यकता होती है। अपवाद-विशिष्टताओं के साथ सबसे बड़ी समस्या यह है कि प्रोग्रामर उनका उपयोग करते हैं जैसे कि वे प्रोग्रामर को प्रभावित करते हैं, वे वास्तव में उनके प्रभाव के बजाय चाहेंगे।
एक गैर-इनलाइन फ़ंक्शन एक ऐसी जगह है जो "कुछ भी नहीं फेंकता है" अपवाद-विनिर्देश कुछ संकलक के साथ कुछ लाभ हो सकता है।