Was ist beispielsweise der Typ des Zeichenfolgenliterals “Hallo”, const char[6]
oder const char*
?
Was ist der Typ eines String-Literals in C++? [duplicate]
Der Typ des Zeichenfolgenliterals "Hello"
ist “Array von 6 const
char
“.
Gewöhnliche String-Literale und UTF-8-String-Literale werden auch als Narrow-String-Literale bezeichnet. Ein Narrow-String-Literal hat den Typ „array of n
const char
“, wo n ist die Größe der Zeichenfolge […]
Es kann jedoch in a umgewandelt werden const char*
durch Array-zu-Zeiger-Konvertierung. Die Array-zu-Zeiger-Konvertierung führt zu einem Zeiger auf das erste Element des Arrays.
-
Dies erklärt wahrscheinlich, warum dieser Code eine Warnung anzeigt
C4172 returning address of local variable or temporary
für diese Funktionconst char* const& f() { return "hello"; }
in VS2010. Stimmst du dem zu ?– Belloc
19. März 13 um 19:02 Uhr
-
@user1042389 Der aus der Array-zu-Zeiger-Konvertierung resultierende Zeiger ist ein temporäres Objekt. Sie geben einen Verweis auf dieses Objekt zurück, sodass der Verweis frei bleibt.
– Josef Mansfeld
19. März 13 um 19:05 Uhr
-
Wo ist das Provisorium? “Hallo” existiert im statischen Speicher!
– Belloc
19. März 13 um 19:09 Uhr
-
@ user1042389 Die Hinweis dazu ist ein temporäres.
– Benutzer529758
19. März 13 um 19:09 Uhr
-
@ user1042389 Die Reihe existiert im statischen Speicher. Der Zeiger, den wir von der Array-zu-Zeiger-Konvertierung erhalten, ist temporär. Genau wie wenn Sie eine haben
int x;
und TU(float)x
– die gegossenfloat
ist vorübergehend.– Josef Mansfeld
19. März 13 um 19:17 Uhr
Der Standard definiert es als ein “Array von n const char
“, so ist es const char[n]
(n ist die Größe der Zeichenfolge, einschließlich des abschließenden NUL-Bytes).
Abschnitt 7, § 2.14.15:
Ein Narrow-String-Literal hat den Typ „array of n const char“, wobei n die Größe des Strings ist, wie unten definiert, und eine statische Speicherdauer hat.
.
const char[6]
.– Juanchopanza
19. März 13 um 18:56 Uhr
was meinst du mit “typ”?
– nabroyan
19. März 13 um 18:56 Uhr
@nabroyan In C++ hat jeder Wert einen Typ. OP möchte den Typ eines Zeichenfolgenliterals wissen.
– Benutzer529758
19. März ’13 um 19:00 Uhr
@H2CO3 Das weiß ich, aber er hat seine Frage direkt in seiner Antwort beantwortet, also habe ich ihm beigebracht, dass er etwas anderes meint
– nabroyan
19. März 13 um 19:03 Uhr