2012-08-30 12 views
5

मैं ग के लिए नया हूँ ++ और समझ की कमी है इसलिए इस कोड में अच्छी तरह से काम करता है प्रकार स्थिरांक चार * की: की तरहसी ++: गुजर एक स्ट्रिंग-शाब्दिक एक स्ट्रिंग पैरामीटर

string GetString(string promt) 
{ 
    cout << promt << ": "; 
    string temp; 
    getline(cin, temp); 
    return temp; 
} 

int main() 
{ 
    string firstName = GetString("Enter your first name"); 
    string lastName = GetString("Enter your last name"); 

    cout<< "Your Name is: " << firstName << " " << lastName; 


    cin.ignore(); 
    cin.get(); 

    return 0; 
} 

स्ट्रिंग-Literals " ब्लै "टाइप कॉन्स चार * हैं। कम से कम ऑटो i = "bla"; इंगित करता है कि मैं टाइप "कॉन्स char *" का हूं। इसे GetString-Function में पास करना क्यों संभव है, क्योंकि फ़ंक्शन एक स्ट्रिंग की अपेक्षा करता है और न कि कॉन्स char *?

+1

स्ट्रिंग अक्षर टाइप 'const char (&) [N]' प्रकार के हैं, लेकिन चूंकि सी स्थानीय सरणी में एक सरणी की प्रतिलिपि नहीं बना सकता है, इसलिए 'ऑटो' स्थानीय 'const char char * को वैसे भी बनाता है। –

उत्तर

8

std::string में converting constructor है जो char const* लेता है और पॉइंटर द्वारा इंगित नल टर्मिनेटेड स्ट्रिंग के साथ स्ट्रिंग को प्रारंभ करता है। यह कन्स्ट्रक्टर explicit नहीं है, इसलिए इसका उपयोग अंतर्निहित रूपांतरणों में किया जा सकता है।

1

std :: स्ट्रिंग कंस्ट्रक्टर देखें। क्या होता है कि कंपाइलर को एक कन्स्ट्रक्टर मिला जो आपके कॉन्स char * को स्वीकार करता है और इसे स्वचालित रूप से stst :: स्ट्रिंग को const * को स्वचालित रूप से कन्फर्ट करने के लिए उपयोग करता है। बीटीडब्ल्यू मैं इसके बजाय const std::string& prompt का उपयोग करने का सुझाव दूंगा।

संबंधित मुद्दे