Escape sequences are used to represent certain special characters within string literals and character literals.
The following escape sequences are available (extra escape sequences may be provided with implementation-defined semantics):
Escape sequence | Description | Representation |
---|---|---|
\' | single quote | byte 0x27 in ASCII encoding |
\" | double quote | byte 0x22 in ASCII encoding |
\? | question mark | byte 0x3f in ASCII encoding |
\\ | backslash | byte 0x5c in ASCII encoding |
\a | audible bell | byte 0x07 in ASCII encoding |
\b | backspace | byte 0x08 in ASCII encoding |
\f | form feed - new page | byte 0x0c in ASCII encoding |
\n | line feed - new line | byte 0x0a in ASCII encoding |
\r | carriage return | byte 0x0d in ASCII encoding |
\t | horizontal tab | byte 0x09 in ASCII encoding |
\v | vertical tab | byte 0x0b in ASCII encoding |
\nnn | arbitrary octal value | byte nnn |
\xnn | arbitrary hexadecimal value | byte nn |
\unnnn (since C++11) | universal character name (arbitrary Unicode value); may result in several characters | code point U+nnnn |
\Unnnnnnnn (since C++11) | universal character name (arbitrary Unicode value); may result in several characters | code point U+nnnnnnnn |
Of the octal escape sequences, \0
is the most useful because it represents the terminating null character in null-terminated strings.
The new-line character \n
has special meaning when used in text mode I/O: it is converted to the OS-specific newline representation, usually a byte or byte sequence. Some systems mark their lines with length fields instead.
Octal escape sequences have a limit of three octal digits, but terminate at the first character that is not a valid octal digit if encountered sooner.
Hexadecimal escape sequences have no length limit and terminate at the first character that is not a valid hexadecimal digit. If the value represented by a single hexadecimal escape sequence does not fit the range of values represented by the character type used in this string literal (char
, char16_t
, char32_t
, or wchar_t
), the result is unspecified.
A universal character name in a narrow string literal or a 16-bit string literal may map to more than one character, e.g. \U0001f34c
is 4 char
code units in UTF-8 (\xF0\x9F\x8D\x8C
) and 2 char16_t
code units in UTF-16 (\uD83C\uDF4C
).
If a universal character name does not correspond to a code point in ISO/IEC 10646 (the range 0x0-0x10FFFF, inclusive) or if a universal-character-name corresponds to a surrogate code point (the range 0xD800-0xDFFF, inclusive), the program is ill-formed.
The question mark escape sequence \?
is used to prevent trigraphs from being interpreted inside string literals: a string such as "??/"
is compiled as "\"
, but if the second question mark is escaped, as in "?\?/"
, it becomes "??/"
#include <cstdio> int main() { std::printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n"); }
Output:
This is a test She said, "How are you?"
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/language/escape