सबसे परेशान करने वाला पार्स: सी 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(Timer(*)()) होता है, जो पॉइंटर-टू-फ़ंक्शन व्याख्या के पक्ष में अस्पष्टता को हल करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3