2012-08-30 18 views
5

Soy nuevo en C++ y tienen una falta de comprensión de por qué este código funciona bien:C++: pasar una cadena literal de Tipo const char * a una cadena de parámetro

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-literales como " bla "son de tipo const char *. Al menos auto i = "bla"; indica que soy del tipo "const char *". ¿Por qué es posible pasarlo a la GetString-Function, porque la función espera una cadena y no un const char *?

+1

Los literales de cadena son del tipo 'const char (&) [N]', pero como C no puede copiar una matriz a la variable local, 'auto' hace que el local' const char * 'de todos modos. –

Respuesta

8

std::string tiene converting constructor que toma char const* y ha inicializado la cadena con la cadena con terminación nula apuntada por el puntero. Este constructor no es explicit, por lo que se puede usar en conversiones implícitas.

1

Mire los constructores std :: string. Lo que sucede es que el compilador encontró un constructor que acepta su const char * y lo usó para hacer convrt const char * a std :: string. BTW Yo sugeriría usar const std::string& prompt en su lugar.

Cuestiones relacionadas