Dados los métodos siguientes:¿Por qué una cadena citada coincide con la firma del método bool antes de una std :: cadena?
// Method 1
void add(const std::string& header, bool replace);
//Method 2
void add(const std::string& name, const std::string& value);
Parecería que el siguiente código va a terminar la llamada al método 1 en lugar del método 2:
something.add("Hello", "World");
terminé creando otro método que se parece a esto:
//Method 3
void MyClass::add(const char* name, const char* value) {
add(std::string(name), std::string(value));
}
Funcionó. Por lo que parece que cuando un método acepta una "cadena entre comillas" que coincidirá en el siguiente orden:
const char*
bool
std::string
¿Por qué una cadena entre comillas se va a tratar como bool
antes de std::string
? ¿Es este el comportamiento habitual? He escrito una cantidad decente de código para este proyecto y no he tenido ningún otro problema con la selección de la firma de método incorrecta ...
Esto es todo. Tuve este problema una vez y me confundió, pero tu segundo parámetro es un const char *, que se convertirá en booleano. – GManNickG