Namespaces
Variants

Escape sequences

From cppreference.net
C++ language
General topics
Keywords
Escape sequences
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Les séquences d'échappement sont utilisées pour représenter certains caractères spéciaux dans les littéraux de chaîne et les littéraux de caractère .

Les séquences d'échappement suivantes sont disponibles :

Séquence
d'échappement
Description Représentation
Séquences d'échappement simples
\' guillemet simple octet 0x27 en codage ASCII
\" guillemet double octet 0x22 en codage ASCII
\? point d'interrogation octet 0x3f en codage ASCII
\\ barre oblique inverse octet 0x5c en codage ASCII
\a sonnerie audible octet 0x07 en codage ASCII
\b retour arrière octet 0x08 en codage ASCII
\f saut de page octet 0x0c en codage ASCII
\n saut de ligne octet 0x0a en codage ASCII
\r retour chariot octet 0x0d en codage ASCII
\t tabulation horizontale octet 0x09 en codage ASCII
\v tabulation verticale octet 0x0b en codage ASCII
Séquences d'échappement numériques
\ nnn valeur octale arbitraire unité de code nnn (1 à 3 chiffres octaux)
\o{ n... } (depuis C++23) unité de code n... (nombre arbitraire de chiffres octaux)
\x n... valeur hexadécimale arbitraire unité de code n... (nombre arbitraire de chiffres hexadécimaux)
\x{ n... } (depuis C++23)
Séquences d'échappement conditionnelles [1]
\ c Défini par l'implémentation Défini par l'implémentation
Noms de caractères universels
\u nnnn valeur Unicode arbitraire ;
peut produire plusieurs unités de code
point de code U+ nnnn (4 chiffres hexadécimaux)
\u{ n... } (depuis C++23) point de code U+ n... (nombre arbitraire de chiffres hexadécimaux)
\U nnnnnnnn point de code U+ nnnnnnnn (8 chiffres hexadécimaux)
\N{ NAME } (depuis C++23) caractère Unicode arbitraire caractère nommé par NAME (voir ci-dessous )
  1. Les séquences d'échappement conditionnelles sont conditionnellement prises en charge. Le caractère c dans chaque séquence d'échappement conditionnelle est un membre du basic source character set (jusqu'en C++23) basic character set (depuis C++23) qui n'est pas le caractère suivant le \ dans toute autre séquence d'échappement.

Table des matières

Plage des noms de caractères universels

Si un nom de caractère universel correspond à un point de code qui n'est ni 0x24 ( $ ), 0x40 ( @ ), ni 0x60 ( ` ) et inférieur à 0xA0, le programme est mal formé. En d'autres termes, les membres du jeu de caractères source de base et les caractères de contrôle (dans les plages 0x0-0x1F et 0x7F-0x9F) ne peuvent pas être exprimés par des noms de caractères universels.

(jusqu'en C++11)

Si un nom de caractère universel correspondant à un point de code d'un membre du jeu de caractères source de base ou à un caractère de contrôle apparaît en dehors d'un littéral de caractère ou d'un littéral de chaîne , le programme est mal formé.

Si un nom de caractère universel correspond à un point de code de substitution (la plage 0xD800-0xDFFF, inclus), le programme est mal formé.

Si un nom de caractère universel utilisé dans un littéral de chaîne UTF-16/32 ne correspond pas à un point de code dans ISO/CEI 10646 (la plage 0x0-0x10FFFF, inclus), le programme est mal formé.

(depuis C++11)
(jusqu'en C++20)

Si un nom de caractère universel correspondant à un point de code d'un membre du jeu de caractères source de base ou à un caractère de contrôle apparaît en dehors d'un littéral de caractère ou d'un littéral de chaîne , le programme est mal formé.

Si un nom de caractère universel ne correspond pas à un point de code dans ISO/CEI 10646 (la plage 0x0-0x10FFFF, inclus) ou correspond à un point de code de substitution (la plage 0xD800-0xDFFF, inclus), le programme est mal formé.

(depuis C++20)
(jusqu'en C++23)

Si un nom de caractère universel correspondant à une valeur scalaire d'un caractère du jeu de caractères de base ou à un caractère de contrôle apparaît en dehors d'un littéral de caractère ou d'un littéral de chaîne , le programme est mal formé.

Si un nom de caractère universel ne correspond pas à une valeur scalaire d'un caractère du jeu de caractères de traduction , le programme est mal formé.

(depuis C++23)


Échappements de caractères universels nommés

\N{ n-char-sequence }
n-char-sequence - un ou plusieurs n-char s
n-char - un caractère du jeu de caractères de traduction , à l'exception de l'accolade fermante } ou du caractère de nouvelle ligne

Un nom de caractère universel de la syntaxe ci-dessus est un caractère universel nommé . Il désigne le caractère correspondant dans le Standard Unicode ( chapitre 4.8 Name ) si la n-char-sequence est égale à son nom de caractère ou à l'un de ses alias de type "control", "correction" ou "alternate" ; sinon, le programme est mal formé.

Ces alias sont listés dans le fichier Unicode Character Database ’s NameAliases.txt . Aucun de ces noms ou alias n'a d'espaces en début ou en fin.

Une n-char-sequence valide doit contenir uniquement des lettres latines majuscules A à Z, des chiffres, des espaces et des traits d'union. Les autres caractères n'apparaissent jamais dans un nom de caractère Unicode, et donc leur apparition dans une n-char-sequence rend toujours le programme mal formé.

(depuis C++23)

Notes

\ 0 est la séquence d'échappement octale la plus couramment utilisée, car elle représente le caractère nul de terminaison dans les chaînes de caractères null-terminated .

Le caractère de nouvelle ligne \n a une signification particulière lorsqu'il est utilisé dans les E/S en mode texte : il est converti en la représentation de nouvelle ligne spécifique au système d'exploitation, généralement un octet ou une séquence d'octets. Certains systèmes marquent leurs lignes avec des champs de longueur à la place.

Les séquences d'échappement octales ont une limite de trois chiffres octaux, mais se terminent au premier caractère qui n'est pas un chiffre octal valide si celui-ci est rencontré plus tôt.

Les séquences d'échappement hexadécimales n'ont pas de limite de longueur et se terminent au premier caractère qui n'est pas un chiffre hexadécimal valide. Si la valeur représentée par une seule séquence d'échappement hexadécimale ne correspond pas à la plage de valeurs représentée par le type de caractère utilisé dans ce littéral de chaîne ( char , char8_t , (since C++20) char16_t , char32_t , (since C++11) ou wchar_t ), le résultat n'est pas spécifié.

Un nom de caractère universel dans un littéral de chaîne étroite ou un littéral de chaîne 16 bits peut correspondre à plus d'une unité de code, par exemple \U0001f34c représente 4 char unités de code en UTF-8 ( \xF0\x9F\x8D\x8C ) et 2 char16_t unités de code en UTF-16 ( \xD83C\xDF4C ).

(depuis C++11)

La séquence d'échappement du point d'interrogation \ ? est utilisée pour empêcher l'interprétation des trigraphes dans les littéraux de chaîne : une chaîne telle que "??/" est compilée comme " \" , mais si le second point d'interrogation est échappé, comme dans "? \? /" , elle devient "??/" . Les trigraphes ayant été supprimés du C++, la séquence d'échappement du point d'interrogation n'est plus nécessaire. Elle est conservée pour la compatibilité avec C++14 (et les révisions antérieures) et C. (depuis C++17)

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_named_character_escapes 202207L (C++23) Échappements de caractères universels nommés

Exemple

#include <iostream>
int main()
{
    std::cout << "This\nis\na\ntest\n\n";
    std::cout << "She said, \"Sells she seashells on the seashore?\"\n";
}

Sortie :

This
is
a
test
She said, "Sells she seashells on the seashore?"

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement tel que publié Comportement correct
CWG 505 C++98 le comportement était indéfini si le caractère suivant
une barre oblique inverse n'était pas l'un de ceux spécifiés dans le tableau
rendu conditionnellement pris en charge
(la sémantique est définie par l'implémentation)

Voir aussi

Documentation C pour Séquence d'échappement