Tengo un par de preguntas que creo que será bastante fácil para alguien con experiencia en C++ para responder, me atrevo las preguntas para el TL; DRC-Style strings a std :: cadena conversión aclaración
Dado el siguiente código:
void stringTest(const std::string &s)
{
std::cout << s << std::endl;
}
int main()
{
stringTest("HelloWorld");
}
Hopefuly alguien puede señalar el error en mi proceso de pensamiento aquí:
¿por qué el parámetro en stringTest tienes que estar marcada const cuando pasa una cadena C-Style? ¿No hay una conversión implícita a std :: string que tenga lugar usando su constructor de cadena cstyle, por lo tanto "s" ya no es una referencia a un literal (y no es necesario que sea const).
Por otra parte, lo que sería un aspecto constructor de cadena cstyle similar, y cómo el compilador sabe a invocar este al ver:
stringTest("HelloWorld");
¿Es, simplemente reconocer una cadena literal a ser algo así como un char * ?
He tropezado con estas preguntas mientras estudiaba los constructores de copia. Otra quesiton rápida para mi propia aclaración ...
En el caso de algo así como:
std::string s = "HelloWorld";
es el constructor de cadena cstyle utilizado para crear instancias de un std :: string temporal, y luego la cadena temporal es copiado en "s" usando el constructor de copia de cadena?:
std::string(const std::string&);
"¿Por qué el parámetro en stringTest tiene que marcarse const"? Independientemente de cuando sea _necessary_, quiere hacer _all_ referencias 'const' que en realidad no se modifican. – leftaroundabout
@leftaroundabout: Punto justo, sin duda tomaré esto en serio. – Riken
posible duplicado de [¿Cómo es que una referencia no constante no puede vincularse a un objeto temporal?] (Http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-temporary-object) –