c++ - const pointers in overload resolution -


जीसीसी इन दो कार्य घोषणाओं को समकक्ष मानता है:

  शून्य एफ (int * a) {} Void F (int * const a) {}  

test.cpp: फ़ंक्शन में 'शून्य एफ (int *)':

परीक्षा सीपीपी: 235: त्रुटि: 'शून्य एफ (इंट *)' का पुनः परिभाषा

test.cpp: 234: त्रुटि: 'शून्य एफ (इंट *)' पहले यहां परिभाषित किया गया है

यह कुछ समझ में आता है क्योंकि कॉलर हमेशा इस मामले में कॉन्स्ट को अनदेखा कर देगा ... यह केवल फ़ंक्शन के अंदर पैरामीटर 'ए' के ​​उपयोग को प्रभावित करता है।

मैं क्या सोच रहा हूं जहां (यदि कहीं भी) मानक कहता है कि अधिभार रिज़ॉल्यूशन के प्रयोजन के लिए फ़ंक्शन तर्कों के रूप में इस्तेमाल किए जाने वाले पॉइंटर्स पर क्वालिफायरों को त्यागने के लिए विशेष रूप से ठीक है।

(मेरा असली मुद्दा यह है कि मैं यह जानना चाहूंगा कि जीसीसी इन बेकार क्वालीफायरों को आंतरिक रूप से खींच लिया जाता है, और जब से सी ++ जीसीसी के फ्रंटएंड मानक को संदर्भित टिप्पणियों से भरा जाता है, तो मानक के संबंधित खंड में मुझे मदद मिल सकती है इंडस्ट्रीज़ को सही स्थान।)

मानक 8.3.5 / 3 में बताता है कि प्रयोजनों के लिए फ़ंक्शन प्रकार का निर्धारण करने कोई भी सीवी-क्वालिफायर सीधे पैरामीटर प्रकार को अर्हता प्राप्त कर दिया जाता है अर्थात। यह सचमुच कहता है कि

  void foo (int * const a) के रूप में घोषित समारोह;  

फ़ंक्शन का प्रकार शून्य (int *) है।

एक पंडितिक व्यक्ति का तर्क हो सकता है कि यह दावा करने के लिए पर्याप्त नहीं है कि ऊपर की घोषणा इस तरह की परिभाषा से मेल खाती है

  void foo (int * a) {}  

या यह दोहरी घोषणा (आपके उदाहरण के अनुसार) के साथ कोड बनाना चाहिए, क्योंकि इन अवधारणाओं में से कोई भी मानक में फ़ंक्शन प्रकार < / Em>। मेरा मतलब है, हम सभी जानते हैं कि ये const का उद्देश्य सभी बाह्य उद्देश्यों के लिए नजरअंदाज करना था, लेकिन अब तक मैं मानक में शब्द खोज नहीं पा रहा था कि निश्चित रूप से यह बिल्कुल राज्य करेगा कि शायद मुझे कुछ याद आती है।

असल में, 13.1 / 3 में इसकी एक "नोट" है जो कहता है कि समान पैरामीटर घोषणाओं (जैसा कि 8.3.5 में परिभाषित किया गया है) के साथ कार्य घोषणाएं समान कार्य । लेकिन यह सिर्फ एक नोट है, यह गैर-प्रामाणिक है, जो बताता है कि मानक में कहीं भी एक ही मुद्दे पर कुछ प्रामाणिक पाठ होना चाहिए।


Comments

Popular posts from this blog

php - multilevel menu with multilevel array -

.net - C# List<T>.Find(x=>x.Rectangle.Contains(Point)) FAIL -

objective c - iPhone and it's wireless area -