Escape sequences
エスケープシーケンスは、 文字列リテラル および 文字リテラル 内の特定の特殊文字を表現するために使用されます。
以下のエスケープシーケンスが利用可能です:
|
エスケープ
シーケンス |
説明 | 表現 |
|---|---|---|
| 単純エスケープシーケンス | ||
\'
|
シングルクォート |
ASCIIエンコーディングにおけるバイト
0x27
|
\"
|
ダブルクォート |
ASCIIエンコーディングにおけるバイト
0x22
|
\?
|
疑問符 |
ASCIIエンコーディングにおけるバイト
0x3f
|
\\
|
バックスラッシュ |
ASCIIエンコーディングにおけるバイト
0x5c
|
\a
|
可聴ベル |
ASCIIエンコーディングにおけるバイト
0x07
|
\b
|
バックスペース |
ASCIIエンコーディングにおけるバイト
0x08
|
\f
|
フォームフィード - 改ページ |
ASCIIエンコーディングにおけるバイト
0x0c
|
\n
|
ラインフィード - 改行 |
ASCIIエンコーディングにおけるバイト
0x0a
|
\r
|
キャリッジリターン |
ASCIIエンコーディングにおけるバイト
0x0d
|
\t
|
水平タブ |
ASCIIエンコーディングにおけるバイト
0x09
|
\v
|
垂直タブ |
ASCIIエンコーディングにおけるバイト
0x0b
|
| 数値エスケープシーケンス | ||
\
nnn
|
任意の8進数値 |
コードユニット
nnn
(1~3桁の8進数)
|
\o{
n...
}
(C++23以降)
|
コードユニット
n...
(任意の桁数の8進数)
|
|
\x
n...
|
任意の16進数値 |
コードユニット
n...
(任意の桁数の16進数)
|
\x{
n...
}
(C++23以降)
|
||
| 条件付きエスケープシーケンス [1] | ||
\
c
|
実装定義 | 実装定義 |
| ユニバーサル文字名 | ||
\u
nnnn
|
任意の
Unicode
値;
複数のコードユニットになる可能性あり |
コードポイント
U+
nnnn
(4桁の16進数)
|
\u{
n...
}
(C++23以降)
|
コードポイント
U+
n...
(任意の桁数の16進数)
|
|
\U
nnnnnnnn
|
コードポイント
U+
nnnnnnnn
(8桁の16進数)
|
|
\N{
NAME
}
(C++23以降)
|
任意のUnicode文字 |
NAME
で指定された文字
(詳細は
下記参照
)
|
-
↑
条件付きエスケープシーケンスは条件付きでサポートされる。各条件付きエスケープシーケンス内の文字
cは、 基本ソース文字セット (C++23まで) 基本文字セット (C++23以降) のメンバであり、他のエスケープシーケンスで\の後に続く文字ではない。
目次 |
ユニバーサル文字名の範囲
|
ユニバーサル文字名が0x24(
|
(C++11まで) |
|
基本ソース文字セット のメンバーまたは制御文字のコードポイントに対応するユニバーサル文字名が、 文字リテラル または 文字列リテラル の外側に現れた場合、プログラムは不適格となる。 ユニバーサル文字名がサロゲートコードポイント(範囲0xD800-0xDFFF、両端を含む)に対応する場合、プログラムは不適格となる。 UTF-16/32文字列リテラルで使用されるユニバーサル文字名が ISO/IEC 10646 のコードポイント(範囲0x0-0x10FFFF、両端を含む)に対応しない場合、プログラムは不適格となる。 |
(C++11以降)
(C++20まで) |
|
基本ソース文字セット のメンバーまたは制御文字のコードポイントに対応するユニバーサル文字名が、 文字リテラル または 文字列リテラル の外側に現れた場合、プログラムは不適格となる。 ユニバーサル文字名が ISO/IEC 10646 のコードポイント(範囲0x0-0x10FFFF、両端を含む)に対応しないか、サロゲートコードポイント(範囲0xD800-0xDFFF、両端を含む)に対応する場合、プログラムは不適格となる。 |
(C++20以降)
(C++23まで) |
|
基本文字セット の文字または制御文字のスカラ値に対応するユニバーサル文字名が、 文字リテラル または 文字列リテラル の外側に現れた場合、プログラムは不適格となる。 ユニバーサル文字名が 翻訳文字セット の文字のスカラ値に対応しない場合、プログラムは不適格となる。 |
(C++23以降) |
名前付きユニバーサル文字エスケープ
上記の構文のユニバーサル文字名は 名前付きユニバーサル文字 である。これは Unicode Standard ( chapter 4.8 Name ) 内の対応する文字を指定する。ただし n-char-sequence がその文字名または「control」、「correction」、「alternate」タイプの文字名エイリアスのいずれかに等しい場合に限る。それ以外の場合、プログラムは不適格となる。 これらのエイリアスは Unicode Character Database の NameAliases.txt にリストされている。これらの名前またはエイリアスのいずれも、先頭または末尾のスペースを持たない。 有効な n-char-sequence は、大文字のラテン文字AからZ、数字、スペース、ハイフンマイナスのみを含まなければならない。他の文字はUnicode文字名に決して現れないため、 n-char-sequence 内でのこれらの文字の出現は常にプログラムを不適格にする。 |
(C++23以降) | |||||||||||||||||||||||||||||
注記
\ 0 は最も一般的に使用される8進数エスケープシーケンスです。これは null終端文字列 の終端null文字を表すためです。
改行文字 \n は、 テキストモードI/O で使用される際に特別な意味を持ちます:OS固有の改行表現(通常は1バイトまたはバイトシーケンス)に変換されます。一部のシステムでは、行の末尾を長さフィールドでマークします。
8進数エスケープシーケンスは最大3桁の8進数を持ちますが、それより早く有効な8進数でない文字が現れた場合、そこで終了します。
16進数エスケープシーケンスには長さ制限がなく、有効な16進数桁ではない最初の文字で終了します。単一の16進数エスケープシーケンスで表される値が、この文字列リテラルで使用される文字型( char 、 char8_t 、 (C++20以降) char16_t 、 char32_t 、 (C++11以降) または wchar_t )が表す値の範囲に収まらない場合、結果は未定義です。
|
ナロー文字列リテラルまたは16ビット文字列リテラルにおけるユニバーサル文字名は、複数のコード単位にマッピングされる可能性があります。例えば、 \U0001f34c はUTF-8では4つの char コード単位( \xF0\x9F\x8D\x8C )に、UTF-16では2つの char16_t コード単位( \xD83C\xDF4C )になります。 |
(C++11以降) |
疑問符エスケープシーケンス \ ? は、文字列リテラル内での トライグラフ の解釈を防止するために使用されます: "??/" のような文字列は " \" としてコンパイルされますが、2番目の疑問符が "? \? /" のようにエスケープされると、 "??/" となります。 C++からトライグラフが削除されたため、疑問符エスケープシーケンスはもはや必要ありません。これはC++14(および以前のリビジョン)およびCとの互換性のために保持されています。 (C++17以降)
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_named_character_escapes
|
202207L
|
(C++23) | 名前付きユニバーサル文字エスケープ |
例
出力:
This is a test She said, "Sells she seashells on the seashore?"
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| CWG 505 | C++98 |
バックスラッシュの後に続く文字が表で指定された
ものではない場合の動作は未定義であった |
条件付きサポートに変更
(セマンティクスは実装定義) |
関連項目
|
C documentation
for
Escape sequence
|
|
C documentation
の
Escape sequence
|