जब मैं इस तरह कोड लिखने:अंतर्निहित रूपांतरण और उपयोगकर्ता परिभाषित रूपांतरण
struct foo {
operator int() const { return 1; }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
यह काम करता है, लेकिन जब मैं इस तरह कोड लिखने:
struct foo {
operator string() const { return string("foo"); }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
संकलक (बजना ++) का कहना है कि error: invalid operands to binary expression ('foo' and 'foo')
मुझे आश्चर्य है कि, क्यों string
प्रकार और int
प्रकार तुलना ऑपरेटर हैं, लेकिन जब foo
में उपयोगकर्ता defi है ned int
रूपांतरण, यह int
पर तुलना करने के लिए निहित होगा, हालांकि foo
केवल उपयोगकर्ता को string
रूपांतरण परिभाषित किया गया है, संकलक अंतर्निहित रूपांतरण नहीं करता है हालांकि (string)a<(string)b
अच्छी तरह से काम करता है।
मैं न
std::string
एक टेम्पलेट की एक विशेषज्ञता, विशेष रूप सेstd::basic_string<char>
तो
operator <
रूपयह के साथ काम करेंगे परिभाषित किया जाता है इस नियम का पता लगाएं जो इसका कारण बनता है, लेकिन अधिकांश एल आसानी से 'int' टाइप – user463035818
संबंधित/डुप्ली के साथ कुछ करने के लिए कुछ है: http://stackoverflow.com/questions/42252023/implicit-conversion-operator-priority – NathanOliver
@NathanOliver imho प्रश्न वास्तव में एक डुप्ली नहीं है, लेकिन जवाब में यह भी एक – user463035818