名前空間
変種
操作

エスケープシーケンス

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
キーワード
エスケープシーケンス
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
一般
値カテゴリ (lvalue, rvalue, xvalue)
評価順序 (副作用完了点)
定数式
未評価式
一次式
ラムダ式(C++11)
リテラル
整数リテラル
浮動小数点リテラル
ブーリアンリテラル
文字リテラル および エスケープシーケンス
文字列リテラル
ヌルポインタリテラル(C++11)
ユーザ定義リテラル(C++11)
演算子
代入演算子: a=b, a+=b, a-=b, a*=b, a/=b, a%=b, a&=b, a|=b, a^=b, a<<=b, a>>=b
インクリメントとデクリメント: ++a, --a, a++, a--
算術演算子: +a, -a, a+b, a-b, a*b, a/b, a%b, ~a, a&b, a|b, a^b, a<<b, a>>b
論理演算子: a||b, a&&b, !a
比較演算子: a==b, a!=b, a<b, a>b, a<=b, a>=b, a<=>b(C++20)
メンバアクセス演算子: a[b], *a, &a, a->b, a.b, a->*b, a.*b
その他の演算子: a(...), a,b, a?b:c
デフォルト比較(C++20)
演算子の代替表現
優先順位と結合性
畳み込み式(C++17)
new 式
delete 式
throw 式
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
演算子オーバーロード
変換
暗黙の変換
const_cast
static_cast
reinterpret_cast
dynamic_cast
明示的な変換 (T)a, T(a)
ユーザ定義変換
 

エスケープシーケンスは文字列リテラルおよび文字リテラル内で一部の特殊な文字を表すために使用されます。

以下のエスケープシーケンスが利用可能です (処理系定義の意味を持つ追加のエスケープシーケンスが提供されることもあります)。

エスケープシーケンス 説明 表現
\' 引用符 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
\xnn 任意の16進数値 バイト値 nn
\unnnn (C++11以上) ユニバーサル文字名
(任意の Unicode 値)
複数の文字になる場合があります
コードポイント U+nnnn
\Unnnnnnnn (C++11以上) ユニバーサル文字名
(任意の Unicode 値)
複数の文字になる場合があります
コードポイント U+nnnnnnnn

[編集] ノート

8進数のエスケープシーケンスのうち、 \0 は、ヌル終端文字列の終端のヌル文字を表すため、最も役に立ちます。

改行文字 \n は、テキストモードの入出力で使用するとき、特別な意味を持ちます。 これは OS 固有の改行文字 (通常は1バイトまたはバイトのシーケンス) に変換されます。 代わりに長さフィールドで行をマークするシステムもあります。

8進数のエスケープシーケンスは3桁の制限を持ちますが、それより前に有効な8進数字でない最初の文字が現れれば、そこで終わります。

16進数のエスケープシーケンスは、長さの制限を持たず、有効な16進数字でない最初の文字で終わります。 単一の16進数のエスケープシーケンスによって表される値が、その文字列リテラルで使用される文字型 (charchar16_tchar32_t または wchar_t) の表現可能な値の範囲に収まらない場合、結果は未規定です。

ナロー文字列リテラルまたは16ビット文字列リテラル内のユニバーサル文字名は、複数文字に対応する場合があります。 例えば、 \U0001f34c は UTF-8 では4個の char コードユニット (\xF0\x9F\x8D\x8C) であり、 UTF-16 では2個の char16_t コードユニット (\uD83C\uDF4C) です。

ユニバーサル文字名が ISO/IEC 10646 のコードポイント (範囲 0x0-0x10FFFF、両端を含む) に対応しない場合、またはユニバーサル文字名がサロゲートコードポイント (範囲 0xD800-0xDFFF、両端を含む) に対応する場合、プログラムは ill-formed です。

疑問符のエスケープシーケンス \? は、文字列リテラルの内部でトライグラフが解釈されるのを防ぐために使用されます。 "??/" などの文字列は "\" としてコンパイルされますが、2つめの疑問符を "?\?/" のようにエスケープすると、 "??/" になります。

[編集]

#include <cstdio>
 
int main()
{
    std::printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
}

出力:

This
is
a
test
 
She said, "How are you?"

[編集] 関連項目

エスケープシーケンスC言語リファレンス