6 Stimmen

Zuweisung von String-Literalen an char*

Ist der folgende Code in C++0x legal, veraltet oder illegal?

char* p = "foobar";

Ich hatte diese Frage ursprünglich gestellt ici als Kommentar.

14voto

Cheers and hth. - Alf Punkte 138555

Die Umwandlung

char* p = "foobar";

ist in C++98/C++03 veraltet und wurde in C++0x entfernt (d.h. §4.2/2 entfernt).

Der Code lautet also nicht gültig in C++0x.

MinGW g++ 4.4.1 gibt jedoch immer noch nur eine Warnung und keinen Fehler aus.

C++98/C++03 §4.2/2 (die in C++0x entfernt wurde):


Ein Zeichenkettenliteral (2.13.4), das kein breites Zeichenkettenliteral ist, kann in einen rWert vom Typ "Zeiger auf" umgewandelt werden char "; ein breites String-Literal kann in einen rWert vom Typ "Zeiger auf" umgewandelt werden wchar_t ". In beiden Fällen ist das Ergebnis ein Zeiger auf das erste Element des Arrays. Diese Konvertierung wird nur in Betracht gezogen, wenn es einen expliziten geeigneten Zeiger-Zieltyp gibt, und nicht, wenn es eine allgemeine Notwendigkeit gibt, von einem l-Wert in einen r-Wert zu konvertieren. [Hinweis: Diese Konvertierung ist veraltet, siehe Anhang D. Für den Zweck der Rangfolge bei der Überladungsauflösung (13.3.3.1.1) wird diese Konvertierung als eine Array-zu-Zeiger-Konvertierung betrachtet, gefolgt von einer Qualifikationskonvertierung (4.4). [Beispiel: "abc" wird umgewandelt in "Zeiger auf const char "als eine Array-zu-Zeiger-Konvertierung und dann zu "Zeiger auf char " als Qualifikationsumwandlung. ]

2voto

Puppy Punkte 141483

Ich glaube, dass dies jetzt in C++0x illegal ist. C++03 hatte einen speziellen Vorbehalt für diese Konvertierung für Legacy-Code, aber C++0x hat ihn entfernt und jetzt verletzen Sie die Korrektheit von const.

Natürlich weiß ich nicht, ob ein echter Compiler sie entfernt hat, aber das wäre sein gutes Recht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X