Warum die Konvertierung von String-Literal in „char*“ in C ungültig, aber in C gültig ist
Das strengere Typsystem von C erzwingt die Verwendung eines const char-Zeigers zum Referenzieren von Zeichenfolgenliteralen, um Änderungen zu verhindern, die zu undefiniertem Verhalten führen könnten. Dies fehlt in C, wo die Konvertierung vom String-Literal in „char“ implizit erlaubt ist.
Um diese Inkonsistenz zu beheben, hat C 11 die veraltete implizite Konvertierung entfernt und den Code wie folgt gerendert:
char* p = "abc";
ungültig. Eine explizite Umwandlung gewährleistet jedoch die Kompatibilität:
char* p = (char*)"abc";
Die Umwandlung umgeht das zugrunde liegende Verhalten nicht. Es ermöglicht die Konvertierung, verhindert jedoch nicht die undefinierten Folgen einer Änderung des Literals.
In C wird die Gültigkeit dieser Konvertierung aus Gründen der Kompatibilität mit Legacy-Code beibehalten. Umfangreicher bestehender Code basiert auf dieser impliziten Konvertierung, sodass es für die Standardkomitees unpraktisch ist, diese Funktionalität ohne vorherige Warnung zu unterbrechen.
Während C die implizite Konvertierung verbietet, um die Typsicherheit zu gewährleisten, lässt C sie aufgrund der Verbreitung zu der Codebasisabhängigkeit. Es wird jedoch dringend empfohlen, char const* für String-Literale in beiden Sprachen zu verwenden, um mögliche Probleme zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum ist die Konvertierung eines String-Literals in „char*' in C ungültig, aber in C gültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!