2012-08-30 12 views
5

Sono nuovo di C++ ed avere una mancanza di capire perché questo codice funziona bene:C++: passando una stringa letterale di tipo const char * in una stringa di parametri

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

String-letterali come " bla "sono di tipo const char *. Almeno auto i = "bla"; indica che I è di tipo "const char *". Perché è possibile passarlo alla funzione GetString, perché la funzione si aspetta una stringa e non un const char *?

+1

I valori letterali delle stringhe sono di tipo 'const char (&) [N]', ma poiché C non può copiare un array nella variabile locale, 'auto' rende il' const const char * locale comunque. –

risposta

8

std::string ha un converting constructor che prende uno char const* e inizializzato la stringa con la stringa terminata null puntata dal puntatore. Questo costruttore non è explicit, quindi può essere utilizzato nelle conversioni implicite.

1

Guarda i costruttori std :: string. Quello che succede è che il compilatore ha trovato un costruttore che accetta il tuo const char * e lo ha usato per convalidare const char * a std :: string. BTW Suggerirei invece di utilizzare const std::string& prompt.

Problemi correlati