मैं सी ++ फ़ंक्शन पॉइंटर सिंटैक्स को समझने की कोशिश कर रहा हूं। ग्रहण में लिनक्स पर जब मैं टाइप किया:क्या सी ++ में शून्य (*) का मतलब कुछ भी है?
void(*);
यह संदेश सिंटेक्स त्रुटि कह के साथ बयान पर प्रकाश डाला है, लेकिन यह मुझे इसे संकलित करते हैं और इस कार्यक्रम भाग गया। फिर विजुअल स्टूडियो पर मैंने कोशिश की और यह संकलित नहीं होगा, "एक अभिव्यक्ति अपेक्षित" कह रही है। हालांकि अजीब बात यह है कि जब मैं करता हूं:
std::vector<void(*)> myVector;
यह विजुअल स्टूडियो पर ठीक संकलित करता है। कुछ ऑनलाइन कंपाइलर्स शून्य (*) पर भी; अपने काम पर ठीक है। मुझे पता है कि:
void (*)();
... एक समारोह सूचक है और ..
void();
... एक समारोह हस्ताक्षर है, जो तुम क्यों कर सकते हैं:
std::function<void()> func;
मुझे फ़ंक्शन पॉइंटर सिंटैक्स को समझने में बहुत परेशानी हो रही है।
धन्यवाद।
क्या कंपाइलर 'शून्य (*) स्वीकार करता है;'? –
यह एक: https://ideone.com/lEeMY3, और http://www.cpp.sh/ लेकिन यह एक http://codepad.org/Zl1UQRa3 नहीं है। विजुअल स्टूडियो इसे std :: वेक्टर घोषणा/परिभाषा में स्वीकार करेगा। जीसीसी के साथ ग्रहण में आश्चर्यजनक रूप से यह एक त्रुटि के रूप में हाइलाइट करता है लेकिन अभी भी संकलित करता है और चलता है। – Zebrafish
यह एक कंपाइलर बग या भाषा एक्सटेंशन, या संयोजन की तरह लगता है। मेरा सुझाव है कि आप '+pedantic-error' ध्वज के साथ और बिना g ++ को आज़माएं। विचार के साथ 'int (**);' संकलित, लेकिन उदा। 'int; 'या, विशेष रूप से,' int **; ', संकलित नहीं करता है। –