संकलक द्वारा doSomething
पर पहले दो कॉल क्यों ठीक हैं, लेकिन सूची में दो तत्वों का उपयोग करके एक अस्पष्ट कॉल का कारण बनता है?प्रारंभकर्ता सूची में तत्वों की संख्या क्यों अस्पष्ट कॉल त्रुटि का कारण बनती है?
#include <vector>
#include <string>
void doSomething(const std::vector<std::string>& data) {}
void doSomething(const std::vector<int>& data) {}
int main(int argc, char *argv[])
{
doSomething({"hello"}); // OK
doSomething({"hello", "stack", "overflow"}); // OK
doSomething({"hello", "stack"}); // C2668 'doSomething': ambiguous call
return 0;
}
या 'कुछ करना (std :: vector ({"हैलो", "ढेर"});', लेकिन आपका समाधान अधिक पठनीय है। किसी भी मामले में, यदि यह वास्तविक कोड में है, तो शायद मैं प्रतीत होता है कि बेकार स्पष्टीकरण की व्याख्या करने के लिए मैं एक छोटी टिप्पणी भी जोड़ूंगा। –
मैंने सोचा कि प्रारंभकर्ताइज़र_लिस्ट कन्स्ट्रक्टर को हमेशा संभव होने पर बुलाया जाता है, उदाहरण के लिए std :: vector {5,1} में तत्व 5 और 1 के साथ वेक्टर प्राप्त होता है और 5 गुना नहीं 1. यह मामला क्यों नहीं है? –
@ ab.o2c प्रारंभकर्ता सूची निर्माता को प्राथमिकता दी जाती है लेकिन हमारे पास इस मामले में 'std :: vector {5,1} 'नहीं है। हमारे पास क्या है 'std :: vector {const char *, const char *} '। चूंकि प्रारंभकर्ता सूची में वेक्टर के तत्वों के समान प्रकार होना चाहिए, इसलिए इस मामले में इसे अनदेखा किया जाता है और इटरेटर कन्स्ट्रक्टर चुना जाता है। –
NathanOliver