Constexpr तर्कों के आधार पर कार्यों को ओवरलोड करना
C 11 में, उनके तर्क constexpr हैं या नहीं, इसके आधार पर कार्यों को ओवरलोड करने में असमर्थता सीमित रही है constexpr की उपयोगिता में कारक। यह सीमा एक ही हस्ताक्षर के साथ अलग-अलग फ़ंक्शन परिभाषाओं के निर्माण को रोकती है, एक constexpr तर्कों के लिए और दूसरी गैर-constexpr तर्कों के लिए।
Constexpr ओवरलोडिंग के लिए तर्क
एक पर विचार करें परिदृश्य जहां एक फ़ंक्शन एक एनम को std::string पर मैप करता है। एक कुशल कार्यान्वयन में संकलन समय पर std::strings की एक सरणी बनाना शामिल होगा। हालाँकि, चूंकि constexpr फ़ंक्शंस ऑब्जेक्ट का निर्माण नहीं कर सकते हैं, इसलिए मौजूदा constexpr कार्यान्वयन के लिए प्रत्येक कॉल पर std::strings के निर्माण की आवश्यकता होती है, जिसके परिणामस्वरूप धीमा प्रदर्शन होता है। एक constexpr-विशिष्ट अधिभार संकलन समय पर std::strings के निर्माण की अनुमति देगा, जिससे दक्षता बढ़ेगी।
एक अन्य उदाहरण में संभावित अनुकूलन के साथ एक फाइबोनैचि फ़ंक्शन को लागू करना शामिल है, जो इस पर आधारित है कि तर्क constexpr है या नहीं। एक constexpr तर्क के लिए, फ़ंक्शन कोई ऑपरेशन नहीं कर सकता है, जबकि एक गैर-constexpr तर्क के लिए, यह रनटाइम प्रदर्शन को बेहतर बनाने के लिए मेमोइज़ेशन का उपयोग कर सकता है।
तकनीकी व्यवहार्यता
ओवरलोडिंग कॉन्स्टेक्सपीआर तर्कों पर आधारित कार्य तकनीकी रूप से सी 11 में संभव है, हालांकि इसके लिए मानक का विस्तार करने की आवश्यकता होगी। अभी तक, constexpr फ़ंक्शंस के व्यवहार को कड़ाई से परिभाषित किया गया है, और फ़ंक्शन ओवरलोडिंग में constexpr और गैर-constexpr तर्कों के बीच अंतर करने के लिए कोई तंत्र नहीं है।
निष्कर्ष
जबकि constexpr ओवरलोडिंग से constexpr फ़ंक्शंस की कार्यक्षमता और दक्षता में वृद्धि होगी, इसके कार्यान्वयन के लिए C 11 मानक में बदलाव की आवश्यकता होगी। इस सुविधा की अनुपस्थिति ने डेवलपर्स को फ़ंक्शन टेम्प्लेट जैसे वर्कअराउंड का उपयोग करने के लिए प्रेरित किया है, लेकिन ये समाधान ओवरलोडेबल कॉन्स्टेक्सपीआर फ़ंक्शंस के समान सुविधा और लचीलापन प्रदान करने में कम हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3