Escape sequences
Escape-Sequenzen werden verwendet, um bestimmte Sonderzeichen in String-Literalen und Zeichenliteralen darzustellen.
Die folgenden Escape-Sequenzen sind verfügbar:
|
Escape-Sequenz
|
Beschreibung | Darstellung |
|---|---|---|
| Einfache Escape-Sequenzen | ||
\'
|
Einfaches Anführungszeichen |
Byte
0x27
in ASCII-Kodierung
|
\"
|
Doppeltes Anführungszeichen |
Byte
0x22
in ASCII-Kodierung
|
\?
|
Fragezeichen |
Byte
0x3f
in ASCII-Kodierung
|
\\
|
Backslash |
Byte
0x5c
in ASCII-Kodierung
|
\a
|
Hörbarer Signalton |
Byte
0x07
in ASCII-Kodierung
|
\b
|
Rückschritt |
Byte
0x08
in ASCII-Kodierung
|
\f
|
Seitenvorschub - neue Seite |
Byte
0x0c
in ASCII-Kodierung
|
\n
|
Zeilenvorschub - neue Zeile |
Byte
0x0a
in ASCII-Kodierung
|
\r
|
Wagenrücklauf |
Byte
0x0d
in ASCII-Kodierung
|
\t
|
Horizontaler Tabulator |
Byte
0x09
in ASCII-Kodierung
|
\v
|
Vertikaler Tabulator |
Byte
0x0b
in ASCII-Kodierung
|
| Numerische Escape-Sequenzen | ||
\
nnn
|
Beliebiger Oktalwert |
Codeeinheit
nnn
(1-3 Oktalziffern)
|
\o{
n...
}
(seit C++23)
|
Codeeinheit
n...
(beliebige Anzahl Oktalziffern)
|
|
\x
n...
|
Beliebiger Hexadezimalwert |
Codeeinheit
n...
(beliebige Anzahl Hexadezimalziffern)
|
\x{
n...
}
(seit C++23)
|
||
| Bedingte Escape-Sequenzen [1] | ||
\
c
|
Implementierungsdefiniert | Implementierungsdefiniert |
| Universelle Zeichennamen | ||
\u
nnnn
|
Beliebiger
Unicode
-Wert;
kann mehrere Codeeinheiten ergeben |
Codepunkt
U+
nnnn
(4 Hexadezimalziffern)
|
\u{
n...
}
(seit C++23)
|
Codepunkt
U+
n...
(beliebige Anzahl Hexadezimalziffern)
|
|
\U
nnnnnnnn
|
Codepunkt
U+
nnnnnnnn
(8 Hexadezimalziffern)
|
|
\N{
NAME
}
(seit C++23)
|
Beliebiger Unicode-Zeichen |
Zeichen mit Namen
NAME
(siehe
unten
)
|
-
↑
Bedingte Escape-Sequenzen werden bedingt unterstützt. Das Zeichen
cin jeder bedingten Escape-Sequenz ist ein Mitglied des basic source character set (bis C++23) basic character set (seit C++23) , das nicht das Zeichen nach dem\in einer anderen Escape-Sequenz ist.
Inhaltsverzeichnis |
Bereich der universellen Zeichennamen
|
Wenn ein universeller Zeichenname einem Codepunkt entspricht, der nicht 0x24 (
|
(bis C++11) |
|
Wenn ein universeller Zeichenname, der einem Codepunkt eines Mitglieds des basic source character set oder einem Steuerzeichen entspricht, außerhalb eines character - oder string literal erscheint, ist das Programm fehlerhaft. Wenn ein universeller Zeichenname einem Ersatzcodepunkt entspricht (Bereich 0xD800-0xDFFF, inklusive), ist das Programm fehlerhaft. Wenn ein universeller Zeichenname, der in einem UTF-16/32-Zeichenkettenliteral verwendet wird, nicht einem Codepunkt in ISO/IEC 10646 entspricht (Bereich 0x0-0x10FFFF, inklusive), ist das Programm fehlerhaft. |
(seit C++11)
(bis C++20) |
|
Wenn ein universeller Zeichenname, der einem Codepunkt eines Mitglieds des basic source character set oder einem Steuerzeichen entspricht, außerhalb eines character - oder string literal erscheint, ist das Programm fehlerhaft. Wenn ein universeller Zeichenname nicht einem Codepunkt in ISO/IEC 10646 entspricht (Bereich 0x0-0x10FFFF, inklusive) oder einem Ersatzcodepunkt entspricht (Bereich 0xD800-0xDFFF, inklusive), ist das Programm fehlerhaft. |
(seit C++20)
(bis C++23) |
|
Wenn ein universeller Zeichenname, der einem Skalarwert eines Zeichens im basic character set oder einem Steuerzeichen entspricht, außerhalb eines character - oder string literal erscheint, ist das Programm fehlerhaft. Wenn ein universeller Zeichenname nicht einem Skalarwert eines Zeichens im translation character set entspricht, ist das Programm fehlerhaft. |
(seit C++23) |
Benannte universelle Zeichenescapes
Ein universeller Zeichenname mit der obigen Syntax ist ein benanntes universelles Zeichen . Es bezeichnet das entsprechende Zeichen im Unicode-Standard ( Kapitel 4.8 Name ), wenn die n-char-sequence gleich seinem Zeichennamen oder einem seiner Zeichennamen-Aliase vom Typ "control", "correction" oder "alternate" ist; andernfalls ist das Programm fehlerhaft. Diese Aliase sind in der Unicode Character Database ’s NameAliases.txt aufgeführt. Keiner dieser Namen oder Aliase hat führende oder nachfolgende Leerzeichen. Eine gültige n-char-sequence darf nur lateinische Großbuchstaben A bis Z, Ziffern, Leerzeichen und Bindestrich-Minus enthalten. Andere Zeichen kommen niemals in einem Unicode-Zeichennamen vor, und daher macht ihr Erscheinen in einer n-char-sequence das Programm immer fehlerhaft. |
(seit C++23) | |||||||||||||||||||||||||||||
Hinweise
\ 0 ist die am häufigsten verwendete oktale Escape-Sequenz, da sie das abschließende Nullzeichen in null-terminated strings darstellt.
Das Zeilenumbruchzeichen \n hat eine besondere Bedeutung bei der Verwendung im Textmodus-I/O : Es wird in die betriebssystemspezifische Zeilenumbruchdarstellung umgewandelt, normalerweise ein Byte oder eine Bytefolge. Einige Systeme kennzeichnen ihre Zeilen stattdessen mit Längenfeldern.
Oktale Escape-Sequenzen haben eine Begrenzung von drei Oktalziffern, brechen jedoch am ersten Zeichen ab, das keine gültige Oktalziffer ist, falls dies früher auftritt.
Hexadezimale Escape-Sequenzen haben keine Längenbegrenzung und enden beim ersten Zeichen, das keine gültige hexadezimale Ziffer ist. Wenn der durch eine einzelne hexadezimale Escape-Sequenz dargestellte Wert nicht in den Wertebereich des in diesem Zeichenliteral verwendeten Zeichentyps passt ( char , char8_t , (since C++20) char16_t , char32_t , (since C++11) oder wchar_t ), ist das Ergebnis nicht spezifiziert.
|
Ein universeller Zeichenname in einem schmalen String-Literal oder einem 16-Bit-String-Literal kann auf mehr als eine Codeeinheit abgebildet werden, z.B. \U0001f34c entspricht 4 char Codeeinheiten in UTF-8 ( \xF0\x9F\x8D\x8C ) und 2 char16_t Codeeinheiten in UTF-16 ( \xD83C\xDF4C ). |
(seit C++11) |
Die Fragezeichen-Escape-Sequenz \ ? wird verwendet, um zu verhindern, dass Trigraphs innerhalb von String-Literalen interpretiert werden: Ein String wie "??/" wird kompiliert als " \" , aber wenn das zweite Fragezeichen escaped wird, wie in "? \? /" , wird es zu "??/" . Da Trigraphs aus C++ entfernt wurden, ist die Fragezeichen-Escape-Sequenz nicht länger notwendig. Sie wird zur Kompatibilität mit C++14 (und früheren Revisionen) und C beibehalten. (since C++17)
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_named_character_escapes
|
202207L
|
(C++23) | Benannte universelle Zeichen-Escapes |
Beispiel
Ausgabe:
This is a test She said, "Sells she seashells on the seashore?"
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| CWG 505 | C++98 |
das Verhalten war undefiniert, wenn das Zeichen nach
einem Backslash nicht eines der in der Tabelle angegebenen war |
bedingt unterstützt gemacht
(Semantik ist implementierungsdefiniert) |
Siehe auch
|
C-Dokumentation
für
Escape-Sequenz
|