एफ का जिज्ञासु मामला; यह हमेशा आउटपुट में 1 क्यों प्रिंट करता है?
एक अजीब व्यवहार का सामना करना जहां किसी फ़ंक्शन को कोष्ठक (f;) के बिना कॉल करना और std::cout के साथ उसके परिणाम को प्रिंट करना लगातार नंबर 1 उत्पन्न करता है, सवाल खड़े कर सकता है। प्रारंभ में, कोई उम्मीद कर सकता है कि कोड एक फ़ंक्शन पॉइंटर प्रिंट करेगा, लेकिन अवलोकन अन्यथा संकेत देते हैं।
नीचे दिए गए कोड पर गौर करें:
#include
using namespace std;
void pr()
{
cout हम देख सकते हैं कि पीआर; तकनीकी रूप से pr() फ़ंक्शन को कॉल नहीं करता है। इसके बजाय, फ़ंक्शन पॉइंटर को कॉउट में पास किया जा रहा है। जब इस प्रक्रिया के दौरान फ़ंक्शन पॉइंटर को बूल में परिवर्तित किया जाता है, तो यह एक तार्किक अभिव्यक्ति के समान व्यवहार करता है जहां एक गैर-शून्य मान सत्य का मूल्यांकन करता है। मुद्रित होने पर इसका अनुवाद 1 हो जाता है।
इसके अलावा, प्री-सी 11 मानक में, कोई अधिभार मौजूद नहीं है जो फ़ंक्शन पॉइंटर को स्ट्रीम करने की अनुमति देता है। इससे std::cout का उपयोग करके सीधे फ़ंक्शन पॉइंटर्स को प्रारूपित करना और प्रिंट करना चुनौतीपूर्ण हो जाता है। हालाँकि, सी 11 के आगमन के साथ, कोई इसे प्राप्त करने के लिए एक कस्टम ओवरलोड को परिभाषित कर सकता है:
template
std::ostream & operatorइस अधिभार को नियोजित करते हुए, cout
(func_ptr=)(num_args=0)
यह कस्टम अधिभार अलग-अलग योग्यता के मुद्रण फ़ंक्शन पॉइंटर्स को प्रदर्शित करता है। हालांकि यह फ़ंक्शन पॉइंटर्स के लिए समस्या को कम करता है, लेकिन यह ओवरलोडेड फ़ंक्शंस या फ़ंक्शन टेम्पलेट्स वाले परिदृश्यों को पूरी तरह से हल नहीं करता है जहां वांछित ओवरलोड निर्दिष्ट करना आवश्यक हो जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3