2010-06-02 35 views
5

में ऑपरेटर बनाम फ़ंक्शंस हाल ही में किसी ने मुझे सी ++ मानक ऑपरेटर (जैसे नया, हटाएं, आकार) और फ़ंक्शन (उदा। टैन, फ्री, मॉलोक) के बीच का अंतर पूछा। "मानक" से मेरा मतलब है कि संकलक सूट द्वारा डिफ़ॉल्ट रूप से प्रदान किया गया है, और उपयोगकर्ता को परिभाषित नहीं किया गया है। नीचे दिए गए जवाब दिए गए थे, हालांकि न तो संतोषजनक लग रहा था।सी/सी ++

(1) किसी ऑपरेटर को इसका उपयोग करने के लिए किसी भी शीर्षलेख को शामिल करने की आवश्यकता नहीं है: उदा। आप किसी भी शीर्षलेख को शामिल किए बिना नए कॉल कर सकते हैं। हालांकि, एक समारोह (मुफ्त() कहें) अनिवार्य रूप से शामिल हेडर की आवश्यकता है।

(2) एक ऑपरेटर को मानक शीर्षकों में कहीं (यानी कक्षा ऑपरेटर के रूप में) परिभाषित किया जाता है। एक समारोह नहीं है।

क्या आप इन उत्तरों की आलोचना कर सकते हैं और मुझे अंतर का बेहतर विचार दे सकते हैं?

+0

जानबूझकर दोनों सेटों में उपयोग किया गया "हटाएं" है? – Sev

+0

देखें http://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new – nico

+0

नहीं, अब – PKG

उत्तर

11

ऑपरेटर कीवर्ड एक निश्चित वाक्यविन्यास के साथ हैं। जो ओवरलोड हो सकते हैं वे सिंटैक्स में थोड़ा भिन्न हो सकते हैं, लेकिन यह सीमाओं के भीतर है। new ऑपरेटर अभी भी new वर्तनी है, भले ही ओवरलोड हो और इसे आमंत्रित करने का वाक्यविन्यास हमेशा समान होता है।

समारोह के नाम पहचानकर्ता है, जो लगभग मनमाने ढंग से किया जा सकता है कर रहे हैं। कोई वाक्यात्मक कारण आप malloc() के साथ भाग नहीं कर सका और इसके बजाय

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it); 

उपयोग करते हैं। (मार्क: वहाँ अन्य कारणों से, हालांकि कर रहे हैं अपने साथी-मजदूरों के विवेक की तरह।।)

+1

+1। मुझे लगता है कि शुरुआत में सवाल गलत है (ऑपरेटर बनाम फ़ंक्शंस?), लेकिन कीवर्ड और पहचानकर्ताओं को हाइलाइट करने का आपका उत्तर इसका उत्तर देता है। – paercebal

4

(1) सख्ती से सच नहीं है। typeid एक ऑपरेटर है, लेकिन इसके उपयोग के लिए आवश्यक है कि आप <typeinfo> शामिल करें।

मेरा उत्तर बस यह होगा कि ऑपरेटरों को इस तरह परिभाषित किया जाएगा। उदाहरण के लिए :: को ऑपरेटर माना जाना जरूरी नहीं है, लेकिन मानक कहता है कि यह है, और ऐसा ही है।

यदि आप अधिक वर्बोज़ उत्तर की तलाश में हैं, तो मैं यह उल्लेख करता हूं कि ऑपरेटर अधिकतर फ़ंक्शन की तरह नहीं देखते हैं। और जो लोग करते हैं [sizeof और typeid] कार्य के रूप में कार्य नहीं करते हैं; रनटाइम पर उनके ऑपरेटरों का मूल्यांकन नहीं किया जाता है।

+0

धन्यवाद। लेकिन शुद्ध सी ऑपरेटरों (जैसे +) के साथ क्या होता है? वे कक्षा ऑपरेटर नहीं हो सकते हैं, लेकिन वे ऑपरेटर हैं क्योंकि सी मानक ऐसा कहता है? – PKG

+0

@user: मुझे समझ में नहीं आता कि आप क्या पूछ रहे हैं। कक्षाओं के लिए 'ऑपरेटर +' अधिभारित किया जा सकता है। –

2

ऑपरेटरों के पास विशेष वाक्यविन्यास है, उदा। ऑपरेटर नाम के बाद आप ब्रैकेट में तर्क डाले बिना new (या +) का उपयोग कर सकते हैं।

0
मेरी समझ समारोह नाम के

गोटो ऑपरेटर का प्रतिनिधित्व है कई लोगों के लिए एक प्रदर्शन कर सकते हैं एक विशिष्ट कोड स्थान आवेदन करने के लिए कूद के बाद, काम की इकाई, दूसरी तरफ एक ऑपरेटर काम की वास्तविक इकाई करता है।

0

एक ऑपरेटर और फ़ंक्शन अवधारणात्मक रूप से समान हैं। उनमें से दोनों इनपुट के रूप में कुछ मूल्य लेते हैं और आउटपुट के रूप में कुछ वापस करते हैं। वे केवल वाक्यविन्यास में अंतर है।

संबंधित मुद्दे