James McNellis ’ उत्तर वास्तव में इसे सभी को कवर करता है, लेकिन यह ’ टी को अधिक स्पष्टीकरण के साथ चोट पहुंचता है (मुझे आशा है)।
तो।
जब आप कॉल करते हैं & hellip;
o.operator int()
और नरकिप; तो अधिभार चयन पूरी तरह से पर o
की स्थिरता पर निर्भर करता है।
कुछ और नहीं।
क्यों देखने के लिए, इस वर्ग पर विचार करें:
struct Bar
{
void f() {}
void f() const {}
};
तकनीकी तौर पर उन सदस्य कार्यों सदस्य कार्यों होने की जरूरत नहीं है। वे मुफ्त खड़े कार्यों के लिए भी चुना जा सकता है। लेकिन तब वे Bar
तर्क की जरूरत है:
struct Bar
{};
void f(Bar&) {}
void f(Bar const&) {}
और उम्मीद है कि अब यह देखने के लिए कि जब आप
Bar o;
f(o);
करना तो पहले समारोह का चयन किया जा सकता है आसान है। और इसलिए यह है। क्योंकि यदि दूसरा फ़ंक्शन चुना गया था, तो आप पहले कभी नहीं प्राप्त कर सकते थे। क्योंकि यदि आप ऑब्जेक्ट const
बनाते हैं, तो यह पहले को चुनने के लिए const
शुद्धता को तोड़ देगा। तो जब ऑब्जेक्ट const
केवल दूसरा चुना जा सकता है, इसलिए, जब यह const
नहीं है तो पहला चयन किया जाता है।
संक्षेप में, इस नियम का एकमात्र व्यावहारिक विकल्प हमेशा दूसरे का चयन करना होगा, जो पहले व्यक्ति को बेकार बना देगा, हां?
चीयर्स & hth।,
स्रोत
2011-06-29 03:59:19
यहां तक कि 'A' एक सामान्य ढेर/ढेर आवंटित वस्तु (अस्थायी नहीं) किया जा रहा है, यह एक ही परिणाम देता है। – iammilind
यदि ऑब्जेक्ट कॉन्स्टेबल नहीं है, तो गैर-कॉन्स अधिभार अधिभार रिज़ॉल्यूशन के दौरान एक बेहतर मिलान है। क्या कोई कारण है कि आप उम्मीद करेंगे कि यह मामला न हो? –
मैं उलझन में क्यों हूं, भले ही 'foo() '' const int' प्राप्त करता है और हमारे पास 'ए :: ऑपरेटर कॉन्स int() const;' है, फिर भी यह सामान्य 'ए :: ऑपरेटर int' चुनता है और चुनता है । – iammilind