O que significa a palavra-chave explicit em C++? Quando e por que usá-la?
Olá a todos! Acabei de começar a estudar C++ e me deparei com a palavra-chave `explicit`. Entendi que ela é usada antes de construtores, mas não compreendo completamente por que ela é necessária e em quais casos aplicá-la.
Eu tenho uma classe simples para trabalhar com vetor:
```cpp
class Vector {
public:
Vector(int size) {
data = new int[size];
sz = size;
}
private:
int* data;
int sz;
};
```
Eu posso escrever um código assim:
```cpp
Vector v = 10; // Por que isso funciona?!
```
O compilador compila isso sem erros. Mas `10` não é um número? Por que ele de repente se transforma em um objeto Vector? Isso é alguma conversão implícita? Parece perigoso para mim, porque eu posso acidentalmente passar um número onde se espera um objeto, e o programa se comportará de forma estranha.
Por exemplo, se eu tenho uma função:
```cpp
void processVector(Vector v) { /* ... */ }
int main() {
processVector(42); // Erro? Ou não? Agora isso funciona!
return 0;
}
```
Eu