के लिए इस कोड को करते हैं:C++: डाली ऑपरेटर बनाम असाइन ऑपरेटर बनाम रूपांतरण निर्माता प्राथमिकता
Test1 t1;
Test2 t2;
t1 = t2;
मेरा मानना है कि तीन तरीके t1 = t2
-
को
- लागू करने के लिए कैसे हो (या अधिक?)
Test1
- में अधिभार असाइन ऑपरेटर
Test2
- में टाइप डाली ऑपरेटर ओवरलोड
Test1(const Test2&)
बनाने के लिए रूपांतरण निर्माता
मेरी जीसीसी परीक्षण के अनुसार, यह है कि क्या प्रयोग किया जाता है की प्राथमिकता है:
- असाइन ऑपरेटर
- रूपांतरण निर्माता और प्रकार डाली ऑपरेटर (अस्पष्ट)
- स्थिरांक रूपांतरण निर्माता और कॉन्स टाइप कास्ट ऑपरेटर (संदिग्ध)
कृपया मुझे यह प्राथमिकता क्यों समझने में मदद करें।
t1.operator=(t2);
अब अधिभार संकल्प के सामान्य नियम लागू होते हैं:
मैं परीक्षण के लिए इस कोड (कुछ लाइनों uncomment आज़माने के लिए)
struct Test2;
struct Test1 {
Test1() { }
Test1(const Test2& t) { puts("const constructor wins"); }
// Test1(Test2& t) { puts("constructor wins"); }
// Test1& operator=(Test2& t) { puts("assign wins"); }
};
struct Test2 {
Test2() { }
// operator Test1() const { puts("const cast wins"); return Test1(); }
// operator Test1() { puts("cast wins"); return Test1(); }
};
int main() {
Test1 t1;
Test2 t2;
t1 = t2;
return 0;
}
'टेस्ट 1 :: टेस्ट 1 (कॉन्स्ट टेस्ट 2 और)' एक "प्रतिलिपि बनाने वाला" नहीं है, यह एक "कनवर्टिंग कन्स्ट्रक्टर" है। – aschepler
यह पोस्ट बताता है कि क्यों रूपांतरण ऑपरेटर उच्च प्राथमिकता का है: http://stackoverflow.com/questions/1384007/conversion-constructor-vs-conversion-operator-precedence –