C++ 文字リテラル

文字リテラルは、定数文字で構成されます。 これは単一引用符で囲んだ文字によって表されます。 文字リテラルには次の 2 種類があります。

  • char 型のナロー文字リテラル。たとえば 'a'

  • wchar_t 型のワイド文字リテラル。たとえば L'a'

文字リテラルに使用する文字には、任意のグラフィック文字を含めることができます。ただし、改行 (\n)、円記号 (\)、単一引用符 (')、二重引用符 (") などの予約文字は除きます。 予約文字を含めるには、エスケープ シーケンスを使用して指定する必要があります。

エスケープ シーケンス

エスケープ シーケンスには、単純、8 進数、16 進数、Unicode (UTF-8)、Unicode (UTF-16) の 5 種類があります。 エスケープ シーケンスとして次のいずれかを使用できます。

エスケープ シーケンス

改行

\n

水平タブ

\t

垂直タブ

\v

バックスペース

\b

キャリッジ リターン

\r

フォーム フィード

\f

警告

\a

円記号

\\

疑問符 (?)

? または \?

単一引用符 (')

\'

二重引用符 (")

\"

null 文字

\0

8 進数

\ooo

16 進数

\xhhh

Unicode (UTF-8)

\uxxxx

Unicode (UTF-16)

\Uxxxxxxxx

次に、エスケープ文字の例をいくつか示します。

#include <iostream>
using namespace std;

int main() {
    char newline = '\n';
    char tab = '\t';
    char backspace = '\b';
    char backslash = '\\';
    char nullChar = '\0';

    cout << "Newline character: " << newline << "ending" << endl; // Newline character:
                                                                  //  ending
    cout << "Tab character: " << tab << "ending" << endl; // Tab character : ending
    cout << "Backspace character: " << backspace << "ending" << endl; // Backspace character : ending
    cout << "Backslash character: " << backslash << "ending" << endl; // Backslash character : \ending
    cout << "Null character: " << nullChar << "ending" << endl; //Null character:  ending
}

\U の付いた UTF-16 エスケープ シーケンスについては、「C++ 文字列リテラル」を参照してください。

Microsoft 固有の仕様 →

8 進数のエスケープ シーケンスは、円記号を前置した最大 3 桁の 8 進数のシーケンスです。 4 桁以上を含む 8 進数のエスケープ シーケンスの動作は実装定義です。これらは、想定外の結果を生じる可能性があります。 次に例を示します。

char c1 = '\100';     // char '@'
char c2 = '\1000';   // char '0' 

8 進数以外の文字を含むエスケープ シーケンスは、最後の 8 進数以外の文字として評価されます。 次に例を示します。

char c3 = '\009'// char '9'
char c4 = '\089'     // char '9'
char c5 = '\qrs'     // char 's'

16 進数のエスケープ シーケンスは、円記号と x を前置した 16 進数のシーケンスです。 16 進数の数字を含まないエスケープ シーケンスでは、"16 進型定数には、少なくとも 1 桁の 16 進数が必要です" という C2153 コンパイラ エラーが発生します。 16 進数と 16 進数以外の文字を含むエスケープ シーケンスは、最後の 16 進数以外の文字として評価されます。 最大の 16 進値は 0xff です。

char c1 = '\x0050';  // char 'P'
char c2 = '\x0pqr';  // char 'r'

END Microsoft 固有の仕様

円記号 (\) は、行の末尾に置かれている場合は行連結文字です。 円記号が文字リテラルとして表示されるようにするには、円記号を 2 つ並べて (\\) 入力する必要があります。 行連結文字の詳細については、「変換フェーズ」を参照してください。

Unicode 文字

UTF-8 エンコーディングされた Unicode 文字はプレフィックス \u を付けて表されます。 次に例を示します。

const wchar_t chr1 = L'\u79c1';

多くの場合、目的の文字をそのまま入力できます。

const wchar_t chr2 = L'私'; 

Visual C++ エディターの設定

Visual C++ コード エディターでは既定で、ロケールに適したエンコーディングが使用されます。 英語バージョンの Visual Studio で、既定のコード ページは 1252 です。 ただし、たとえば Unicode 文字など、別の種類の文字を追加してファイルを保存すると、"このファイルの Unicode 文字の一部は現在のコードページでは保存できません。 データを保持するために Unicode で保存しなおしますか?" というメッセージが表示されます。他のエンコーディングを使用してファイルを保存できます。 [ファイル] メニューの [保存オプションの詳細設定] ダイアログを使用して、ファイルのコードページを変更することもできます。 また [ツール]、[オプション]、[テキスト エディター]、[全般] オプション ページで、[シグネチャ (BOM) なしの UTF-8 エンコードを自動検出] をオフにして、Unicode 文字の自動検出を無効にすることができます。

参照

関連項目

C++ リテラル