नीचे दिए गए कोड में, यदि एक अस्पष्टता के कारण एक से अधिक कास्ट ऑपरेटर परिभाषित किया गया है तो मैं एक कंपाइलर त्रुटि प्राप्त करने की अपेक्षा करता हूं।ओवरलोडेड कास्ट ऑपरेटरों की प्राथमिकता
#include <iostream>
#include <sstream>
struct A
{
operator const char*() { return "hello world\n"; }
operator float() { return 123.0F; }
//operator int() { return 49; }
};
int main()
{
A a;
std::stringstream ss;
ss << a;
std::cout << ss.str();
return 0;
}
इसके बजाय, जब तक केवल एक ही सांख्यिक डाली ऑपरेटर परिभाषित किया गया है तो यह कोई त्रुटि है, कोई चेतावनी के साथ संकलित, और संख्यात्मक डाली operator const char *()
वरीयता में प्रयोग किया जाता है। घोषित ऑपरेटरों का आदेश कोई फर्क नहीं पड़ता।
लेकिन अगर operator int()
और operator float()
दोनों तो परिभाषित कर रहे हैं मैं मैं क्या शुरू से ही उम्मीद:
'operator <<' is ambiguous
वहाँ डाले के लिए पूर्वता नियम हैं, या क्यों संकलक डिफ़ॉल्ट रूप से संख्यात्मक कलाकारों का चयन करता है? मैं समझता हूं कि मुझे स्पष्ट रूप से बताएं कि मेरा कौन सा कास्ट मतलब है, लेकिन मेरा प्रश्न संकलक बनाता है डिफ़ॉल्ट विकल्प पर है।
संपादित करें: कंपाइलर एमएसवीसी 2010
मैं एक प्राथमिकता पर भरोसा नहीं करता। टाइप करें जिसका मतलब है। बस एक स्पष्ट कास्ट का उपयोग करें। 'ss << static_cast (ए);' –
andre
मैंने आपका उदाहरण संकलित किया है और g ++ मुझे "त्रुटि: ऑपरेटर के लिए अस्पष्ट अधिभार << 'एसएस << ए' में देता है। तो, कम से कम g ++ अपेक्षित के रूप में काम कर रहा है। –
ऐसा लगता है कि यह संकलक निर्भर है। आप किस कंपाइलर का उपयोग कर रहे हैं? – SztupY