¿Qué significa la palabra clave explicit en C++? ¿Cuándo y por qué usarla?
¡Hola a todos! Acabo de empezar a aprender C++ y me topé con la palabra clave `explicit`. Entiendo que se usa antes de los constructores, pero no termino de comprender para qué sirve y en qué casos aplicarla.
Tengo una clase simple para trabajar con un vector:
```cpp
class Vector {
public:
Vector(int size) {
data = new int[size];
sz = size;
}
private:
int* data;
int sz;
};
```
Puedo escribir código como este:
```cpp
Vector v = 10; // ¿Por qué funciona esto?!
```
El compilador lo compila sin errores. Pero ¿acaso `10` no es un número? ¿Por qué de repente se convierte en un objeto Vector? ¿Es una conversión implícita? Me parece peligroso, porque podría pasar accidentalmente un número donde se espera un objeto, y el programa se comportaría de manera extraña.
Por ejemplo, si tengo una función:
```cpp
void processVector(Vector v) { /* ... */ }
int main() {
processVector(42); // ¿Error? ¿O no? ¡Ahora funciona!
return 0;
}
```
Yo