मुझे आज एक कार्यक्रम में एक दिलचस्प स्थिति का सामना करना पड़ा जहां मैंने अनजाने में एक std :: स्ट्रिंग के लिए एक हस्ताक्षरित पूर्णांक असाइन किया। विजुअलस्टूडियो सी ++ कंपाइलर ने इसके बारे में कोई चेतावनी या त्रुटियां नहीं दीं, लेकिन जब मैंने प्रोजेक्ट चलाया तो मुझे बग नोटिस हुआ और उसने मुझे अपनी स्ट्रिंग के लिए जंक कैरेक्टर दिए।सी ++ एक स्ट्रिंग को एक पूर्णांक को असाइन करने की अनुमति क्यों देता है?
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
निम्नलिखित कोड भी ठीक संकलित:
यह वही कोड की तरह देखा की तरह है
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
एक त्रुटि में निम्न परिणाम:
unsigned int my_number = 1234;
std::string my_string(my_number);
क्या चल रहा है? कैसे संकलक अंतिम कोड ब्लॉक के साथ निर्माण को रोक देगा, लेकिन पहले 2 कोड ब्लॉक बनाने दें?
कंपाइलर त्रुटियां क्या हैं? मेरे लिए, g ++ v4.4 संकलित और सही ढंग से काम करता है – CsTamas
मुझे खेद है, मैंने दूसरे कोड ब्लॉक के साथ गलती की - यह संकलित करता है। आखिरी वाला एक std :: स्ट्रिंग कन्स्ट्रक्टर नहीं होने के बारे में त्रुटि के साथ विफल रहता है जो एक हस्ताक्षरित int स्वीकार करता है। – user55417