Was ist der Typ eines String-Literals in C++? [duplicate]

Lesezeit: 2 Minuten

Was ist beispielsweise der Typ des Zeichenfolgenliterals “Hallo”, const char[6] oder const char* ?

  • 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

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 temporaryfür diese Funktion const 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 gegossen float 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.

.

676180cookie-checkWas ist der Typ eines String-Literals in C++? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy