Avatar ·

¿Qué significa la palabra clave explicit en C++ y por qué es necesaria?

¡Hola a todos! Empecé a estudiar C++ y me topé con la palabra clave `explicit` antes de los constructores. Por ahora entiendo que tiene algo que ver con las conversiones implícitas, pero no termino de comprender por qué usarla. Aquí hay un ejemplo simple que escribí. Tengo una clase `String` que toma un número (tamaño de la cadena) en el constructor: ```cpp class String { public: String(int size) { // algún código } }; void printString(const String& s) { // imprimimos la cadena } int main() { printString(42); // ¡Esto funciona! ¿Pero por qué? return 0; } ``` Estoy pasando a la función `printString` el número `42`, aunque espera un objeto `String`. ¡Y esto se compila! Me parece extraño y puede llevar a errores. Por ejemplo, si accidentalmente paso un tipo incorrecto, el compilador no me advertirá. He oído que `explicit` puede solucionar esto, pero ¿cómo exactamente? ¿Cuándo debería usarlo? ¿Y hay casos en los que la conversión implícita, por el contrario, es útil? Agradecería