मैं कुछ सवाल है कि मैं सी के साथ ++ अनुभव किसी के लिए काफी आसान हो जाएगा लगता है कि मिल गया है जवाब देने के लिए, मैं बोल्ड हूँ टी एल के लिए quesitons; डॉसी शैली तार :: स्ट्रिंग रूपांतरण स्पष्टीकरण
क्यों stringTest में पैरामीटर चिह्नित किया जाना है करता स्थिरांक जब एक सी शैली स्ट्रिंग पारित कर दिया:
void stringTest(const std::string &s)
{
std::cout << s << std::endl;
}
int main()
{
stringTest("HelloWorld");
}
Hopefuly किसी ने मेरे विचार प्रक्रिया यहाँ में त्रुटि का कहना कर सकते हैं:
निम्नलिखित कोड को देखते हुए? क्या एक std :: स्ट्रिंग में कोई अंतर्निहित रूपांतरण नहीं है जो इसकेस्टाइल स्ट्रिंग कन्स्ट्रक्टर का उपयोग करके होता है, इसलिए "एस" अब एक शाब्दिक (और कॉन्स्ट होने की आवश्यकता नहीं है) का संदर्भ नहीं है।
इसके अलावा, क्या एक cstyle स्ट्रिंग निर्माता देखो की तरह, और कैसे संकलक देखने पर यह आह्वान करने के लिए पता है जाएगा:
stringTest("HelloWorld");
यह बस एक स्ट्रिंग शाब्दिक पहचान करता है एक चार की तरह कुछ होने के लिए * ?
कॉपी कन्स्ट्रक्टर का अध्ययन करते समय मैंने इन सवालों पर ठोकर खाई है। मेरे अपने स्पष्टीकरण के लिए एक और त्वरित quesiton ...
की तरह कुछ के मामले में:
std::string s = "HelloWorld";
cstyle स्ट्रिंग एक अस्थायी std :: स्ट्रिंग का दृष्टांत के लिए इस्तेमाल किया निर्माता, और फिर अस्थायी स्ट्रिंग है स्ट्रिंग कॉपी कन्स्ट्रक्टर का उपयोग करके "एस" में कॉपी किया गया?:
std::string(const std::string&);
"स्ट्रिंगटेस्ट में पैरामीटर को क्यों चिह्नित किया जाना चाहिए" - चाहे यह _necessary_ है, आप _all_ संदर्भ 'const' बनाना चाहते हैं जो वास्तव में संशोधित नहीं हैं। – leftaroundabout
@ बाएंराउंडबाउट: उचित बिंदु, मैं निश्चित रूप से इसे दिल में ले जाऊंगा। – Riken
संभावित डुप्लिकेट [कैसे एक गैर-कॉन्स्ट संदर्भ एक अस्थायी वस्तु से बंधे नहीं हो सकता है?] (Http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -ए-अस्थायी-ऑब्जेक्ट) –