Was bedeutet das Schlüsselwort explicit in C++ und wofür wird es benötigt?
Hallo zusammen! Ich habe angefangen, C++ zu lernen, und bin auf das Schlüsselwort `explicit` vor Konstruktoren gestoßen. Bisher habe ich verstanden, dass es irgendwie mit impliziten Konvertierungen zusammenhängt, aber ich verstehe nicht ganz, warum man es verwenden sollte.
Hier ist ein einfaches Beispiel, das ich geschrieben habe. Ich habe eine Klasse `String`, die im Konstruktor eine Zahl (die Größe des Strings) akzeptiert:
```cpp
class String {
public:
String(int size) {
// irgendein Code
}
};
void printString(const String& s) {
// String ausgeben
}
int main() {
printString(42); // Das funktioniert! Aber warum?
return 0;
}
```
Ich übergebe der Funktion `printString` die Zahl `42`, obwohl sie ein `String`-Objekt erwartet. Und das wird kompiliert! Ich finde das seltsam und kann zu Fehlern führen. Wenn ich zum Beispiel versehentlich den falschen Typ übergebe, warnt mich der Compiler nicht.
Ich habe gehört, dass `explicit` das beheben kann, aber wie genau? Wann sollte man es anwenden? Und gibt es Fälle, in denen eine implizite Konvertierung im Gegenteil nützlich ist? Ich wäre dankbar für jede Erklärung.