2012-08-30 7 views
5

bir dize parametreye Tipi const char *:C++: geçen bir dize değişmezi Bu kod iyi çalışıyor neden ben c yeniyim ++ ve anlayış eksikliği var

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; 
} 

Dize-rakamları gibi " bla "Type const char *" şeklindedir. En azından otomatik i = "bla"; , "const const *" türünde olduğunu gösterir. Fonksiyonu bir string değil, const char * beklediği için GetString-Function'a iletmek neden mümkündür?

+1

Dize değişmezleri, const const (&) [N] 'türündendir, ancak C bir diziyi yerel değişkene kopyalayamadığı için,' auto', yerel 'const char *' öğesini yine de yapar. –

cevap

8

std::string 'a sahiptir ve char const* alır ve işaretçi tarafından işaret edilen boş sonlandırılmış dize ile dize başlatılır. Bu kurucu explicit değil, bu nedenle örtülü dönüşümlerde kullanılabilir.

1

std :: string yapıcılarına bakın. Ne olur, bu derleyici, const char * 'nızı kabul eden bir constructor buldu ve bunu std :: string'inde const char *' i otomatik olarak çevirmek için kullandı. BTW Bunun yerine const std::string& prompt kullanmanızı öneririm.