"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > सबसे परेशान करने वाला पार्स: टाइमर() - ऑब्जेक्ट या फ़ंक्शन कॉल?

सबसे परेशान करने वाला पार्स: टाइमर() - ऑब्जेक्ट या फ़ंक्शन कॉल?

2024-12-21 को प्रकाशित
ब्राउज़ करें:731

The Most Vexing Parse: Timer() - Object or Function Call?

सबसे परेशान करने वाला पार्स: सी 11 में अस्पष्टता को उजागर करना

सी 11 में "सबसे परेशान करने वाला पार्स" अस्पष्टता एक समान इनिशियलाइज़र का उपयोग करते समय स्वयं प्रस्तुत होती है, जैसा कि निम्नलिखित कोड में दर्शाया गया है स्निपेट:

#include 

class Timer
{
public:
    Timer() {}
};

int main()
{
    auto dv = Timer(); // Ambiguity: Object or function call?
    int time_keeper(Timer()); // Ambiguity: Pointer or call?
    return 0;
}

पहली अभिव्यक्ति को समझना (ऑटो डीवी = टाइमर())

पहली अभिव्यक्ति में, ऑटो कीवर्ड का तात्पर्य है कि डीवी का प्रकार इनिशियलाइज़र से अनुमानित है बराबर चिह्न (=) के दाईं ओर। इनिशियलाइज़र बिना किसी तर्क के टाइमर कंस्ट्रक्टर के लिए एक कॉल है, जो एक टाइमर ऑब्जेक्ट लौटाता है। इसलिए, DV टाइमर प्रकार की एक वस्तु है।

दूसरी अभिव्यक्ति को समझना (int time_keeper(Timer()))

दूसरी अभिव्यक्ति में, अस्पष्टता उत्पन्न होती है क्योंकि कंपाइलर यह निर्धारित नहीं कर सकता है कि टाइमर() एक फ़ंक्शन कॉल है या संदर्भ द्वारा पारित टाइमर प्रकार का ऑब्जेक्ट है।

  • यदि टाइमर() है एक फ़ंक्शन कॉल, फिर int time_keeper(Timer()) एक फ़ंक्शन घोषित करता है जिसे time_keeper कहा जाता है जो एक Timer ऑब्जेक्ट को इनपुट के रूप में लेता है और एक int लौटाता है।
  • यदि Timer() टाइमर प्रकार का एक ऑब्जेक्ट है, तो int time_keeper( टाइमर()) टाइम_कीपर नामक एक फ़ंक्शन घोषित करता है जो इनपुट के रूप में टाइमर ऑब्जेक्ट पर एक पॉइंटर लेता है और एक इंट लौटाता है।

हालाँकि, क्योंकि फ़ंक्शन क्षय हो जाते हैं जब पॉइंटर्स को तर्क के रूप में पारित किया जाता है, तो टाइम_कीपर का वास्तविक प्रकार int(Timer(*)()) होता है, जो पॉइंटर-टू-फ़ंक्शन व्याख्या के पक्ष में अस्पष्टता को हल करता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3