मैं इसका पता नहीं लगा सकता:
int main() {
int (*) (int *) = 5;
return 0;
}
उपरोक्त असाइनमेंट g ++ c ++ 11 के साथ संकलित है। मुझे पता है कि int (*) (int *)
यह एक फ़ंक्शन के लिए एक संकेतक है जो एक (int *)
तर्क के रूप में स्वीकार करता है और एक इंट रिटर्न देता है, लेकिन मुझे समझ में नहीं आता है कि आप इसे 5 से कैसे बराबरी कर सकते हैं। सबसे पहले मैंने सोचा था कि यह एक ऐसा फ़ंक्शन है जो लगातार 5 (मेरे हाल के सीखने से) में लौटता है एफ #, शायद, हाहा), तो मैंने सोचा, संक्षेप में, कि फ़ंक्शन पॉइंटर मेमोरी लोकेशन 5 को इंगित करता है, लेकिन यह काम नहीं करता है, स्पष्ट रूप से, और न ही हेक्स मान।
यह सोचते हुए कि यह हो सकता है क्योंकि फ़ंक्शन एक इंट लौटाता है, और एक इंट असाइन करना ठीक है (किसी तरह), मैंने यह भी कोशिश की:
int * (*) (int *) = my_ptr
जहां my_ptr
प्रकार है int *
, इस प्रकार के दूसरे फ़ंक्शन पॉइंटर के रूप में, जैसा कि पहले मामले में टाइप इंट के साथ है। यह संकलन नहीं है। इसके बजाय, 5 या किसी भी इंट वैल्यू my_ptr
को इस फंक्शन पॉइंटर के लिए संकलित नहीं करता है।
तो असाइनमेंट का क्या मतलब है?
अपडेट १
हमारे पास पुष्टि है कि यह एक बग है, जैसा कि सबसे अच्छा उत्तर में दिखाया गया है। हालाँकि, यह अभी भी ज्ञात नहीं है कि वास्तव में क्या होता है जो आप फ़ंक्शन पॉइंटर को असाइन करते हैं, या असाइनमेंट के साथ क्या होता है। उस पर कोई (अच्छा) स्पष्टीकरण बहुत सराहना की जाएगी! कृपया समस्या पर अधिक स्पष्टता के लिए नीचे दिए गए संपादन देखें।
संपादित करें 1
मैं gcc संस्करण का उपयोग कर रहा हूँ 4.8.2 (Ubuntu 4.8.2 में)
संपादित करें २
वास्तव में, यह कुछ भी करने के लिए मेरे संकलक पर काम करता है। यहां तक कि इसे एक एसटीडी :: स्ट्रिंग चर या एक फ़ंक्शन नाम के बराबर, जो एक डबल लौटाता है, काम करता है।
2.1 संपादित करें
दिलचस्प बात यह है कि इसे किसी भी फ़ंक्शन के लिए एक फ़ंक्शन पॉइंटर बनाते हैं जो एक डेटा प्रकार देता है जो पॉइंटर नहीं है, इसे संकलित करने देगा, जैसे कि
std::string (*) () = 5.6;
लेकिन जैसे ही फंक्शन पॉइंटर एक ऐसे फंक्शन के लिए होता है जो कुछ पॉइंटर लौटाता है, वह कंपाइल नहीं करता, जैसे कि
some_data_type ** (*) () = any_value;