2015-06-26 10 views
8

मैं this पढ़ रहा था। जवाब दिलचस्प ऐतिहासिक तथ्यों के बारे में बात करती है @NPE द्वारा दिए गए & कि,सी ++ से ओवरलोड कीवर्ड क्यों हटाया गया?

  • जल्दी सी में वहाँ एक विशेष कीवर्ड (अधिभार) कि था एक पहचानकर्ता के रूप में अतिभारित घोषित करने के लिए प्रयोग की जाने वाली हुआ करता था ++ कहते हैं;

तो, अधिभार कीवर्ड को हटाने के पीछे कारण क्या है? मेरे पास Stroustrup द्वारा Design and Evolution of C++ नहीं है। ओवरलोड कीवर्ड के साथ क्या गलत है?

उत्तर

9

Stroustrup डी & ई 11.2.4 "overload कीवर्ड" में कहा गया है कि overload कीवर्ड जब "विलय" (या उपयोग करते हुए) दो पुस्तकालयों जो दोनों का उपयोग किया वही कार्य का नाम (नामस्थान * बिना) मुसीबतों का कारण बनता है। उदाहरण के लिए, सी ++ complex हेडर से sqrt(complex) बनाम सी 0 हेडर math.h में sqrt। अगर उनमें से एक के रूप में overloadable समारोह की घोषणा की, लेकिन अन्य नहीं किया है, आप इस तरह के एक आदेश में शीर्ष लेख शामिल किया था कि पहले यह हुआ ओवरलोडिंग सक्षम किया गया था:

// #include <complex> 
overload sqrt; 
complex sqrt(complex); 

// #include <math.h> 
double sqrt(double); // fine 

// --------------------------- 

// #include <math.h> 
double sqrt(double); 

// #include <complex> 
overload sqrt;   // ERROR: cannot allow overloading 
         //  of an already declared function 
complex sqrt(complex); 

संभावित समाधानों में अनियंत्रित रहे हैं " सबसे सरल मामलों के अलावा सभी "।

(*) overload कीवर्ड CFront 2.0 के साथ अप्रचलित किया गया था, 1989 में जारी किया गया नेमस्पेस 1993

कीवर्ड के मूल उद्देश्य में मानकीकरण प्रस्ताव में पेश किए गए दो आशंका से निपटने के लिए किया गया था:

  1. चिंताएं कि अनदेखी अस्पष्टताएं हो सकती हैं।
  2. चिंता है कि प्रोग्राम को ठीक से तब तक लिंक नहीं किया जा सकता जब तक प्रोग्रामर ने स्पष्ट रूप से घोषित नहीं किया कि कौन से फ़ंक्शंस ओवरलोड किए गए थे।

पूर्व डर काफी हद तक जमीनहीन साबित हुआ। वास्तविक उपयोग में पाए गए कुछ समस्याएं ऑर्डर-स्वतंत्र ओवरलोडिंग रिज़ॉल्यूशन नियमों से निपटाई जाती हैं। बाद के डर को सी अलग संकलन नियमों के साथ सामान्य समस्या में कोई आधार नहीं मिला, जिसका अधिभार अधिभार के साथ कुछ नहीं था।

+2

कृपया डी/ई खरीदें/उधार/पढ़ें। यह वास्तव में एक महान किताब है, जिसमें कई प्रबुद्ध अंतर्दृष्टि हैं। – dyp

+0

@PravasiMeet यह एक सी पुस्तकालय है। मुझे लगता है कि '#ifdef __cplusplus/* newline */overload sqrt जैसे कुछ जोड़ना;/* newline */# endif' को उन "अप्रबंधनीय" वर्कअराउंड्स में से एक माना जा सकता है, या असंभव है यदि बाहरी लाइब्रेरी हेडर बदला नहीं जा सकता – dyp

+0

कृपया बताएं कि आप वास्तव में क्या लिखना चाहते हैं "बाहरी पुस्तकालय हेडर हो सकता है बदला नहीं जा सकता "? – Destructor

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