Avatar ·

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.