que acabo de escribir una función:¿Cómo gestiona std :: string este truco?
void doSomeStuffWithTheString(const std::string& value) {
...
std::string v = value;
std::cout << value.c_str();
...
}
pero luego me llaman a esto con
doSomeStuffWithTheString("foo");
y funciona. Así que habría pensado que esto funcionara (un const char * para inicializar una instancia implícita de std :: string) el valor debería pasarse por valor, pero en este caso se pasa por (const) referencia.
¿Es por casualidad una cadena std :: string implícita instanciada de const char * cuando la referencia es const? si no, ¿cómo funciona esto?
EDITAR
lo que sucede si la función está sobrecargado con
void doSomeStuffWithTheString(const char* value);
la que se elegirá el compilador?
Has respondido bastante a tu pregunta :) – pezcode
interesante, no lo sabía. ¿Qué necesita tener un objeto para que tales constructores implícitos ocurran en llamadas const-by-ref (y cómo evitarlo?) – lurscher
El programa está mal formado: 'std :: string = value;' no es válido y debe ser rechazado por su compilador. –