Que signifie le mot-clé explicit en C++ et à quoi sert-il ?
Bonjour à tous ! J'ai commencé à apprendre le C++ et je suis tombé sur le mot-clé `explicit` devant les constructeurs. Pour l'instant, j'ai compris que cela a un rapport avec les conversions implicites, mais je ne saisis pas encore complètement pourquoi l'utiliser.
Voici un exemple simple que j'ai écrit. J'ai une classe `String` qui prend un nombre (taille de la chaîne) dans son constructeur :
```cpp
class String {
public:
String(int size) {
// du code
}
};
void printString(const String& s) {
// on imprime la chaîne
}
int main() {
printString(42); // Cela fonctionne ! Mais pourquoi ?
return 0;
}
```
Je passe le nombre `42` à la fonction `printString`, alors qu'elle attend un objet `String`. Et cela se compile ! Je trouve cela étrange et cela peut mener à des erreurs. Par exemple, si je passe accidentellement un mauvais type, le compilateur ne m'avertira pas.
J'ai entendu dire que `explicit` peut corriger cela, mais comment exactement ? Quand faut-il l'utiliser ? Et y a-t-il des cas où la conversion implicite est au contraire utile ? Je serais reconnaissant pour toute explication.
No answers yet.
Connectez-vous pour laisser une réponse