Sunday, 15 June 2014

c++ - How the compiler chooses correct overloaded function? -


मेरे पास निम्न कन्स्ट्रक्टर के साथ एक वर्ग है:

  रंग (const float red = 0.0 एफ, कॉन्स्ट फ्लोट हरा = 0.0 एफ, कॉन्स्ट फ्लोट नीला = 0.0 एफ, कॉन्स्ट फ्लोट अल्फा = 1.0 एफ); रंग (कॉन्स्ट अहस्ताक्षरित चार लाल, कॉन्स्ट अहस्ताक्षरित चार हरे रंग, कॉन्सट अहस्ताक्षरित चार नीला, कॉन्स्ट अहस्ताक्षरित चार अल्फा); रंग (घुमावदार लंबे अंतर रंग);  

अगर मैं इसे इस तरह से कॉल करता हूं:

  रंग सी {0.0f, 1.0f, 0.0f, 1.0f};  

सब कुछ ठीक है लेकिन अगर मैं इसे कॉल करता हूं:

  रंग सी {78, 180, 84, 255};  

या

  रंग सी {0xffffffff};  

मुझे प्राप्त

त्रुटि C2668: 'रंग :: रंग': अतिभारित फ़ंक्शन को कॉल करें

क्यों ? इसे सही तरीके से कैसे चुनें?

रंग सी {0.0f, 1.0f, 0.0f , 1.0 एफ}; स्पष्ट नहीं है, कंपाइलर उस कंस्ट्रक्टर को चुन सकता है जो फ्लोटिंग पॉइंट आर्गुमेंट लेता है।

साथ color c {78, 180, 84, 255}; , वाकई वास्तव में हस्ताक्षरित प्रकार हैं इसलिए संकलक को शाब्दिक रूप से परिवर्तित करना है। इसके पास दो विकल्प हैं और यह नहीं पता कि किसको चुनना है।

यदि आप लिखते हैं, हालांकि, थकावट से, रंग सी {static_cast तो निर्माता लेने स्थिरांक अहस्ताक्षरित चार तर्क हैं स्वचालित रूप से बुलाया गया है।

दोबारा, रंग सी {0xffffffff}; के साथ, फिर से एक हस्ताक्षरित हेक्साडेसिमल शाब्दिक इसलिए कंपाइलर को पता नहीं है कि किस का उपयोग करना है।


No comments:

Post a Comment