文字列定数
定数の概要:インデックス への移動
文字列リテラル
文字列定数は文字列リテラルとも呼ばれ、文字の固定的な並びを扱うのに使用される特別な定数カテゴリを構成します。 文字列リテラルは、データ型が const char の配列で、記憶クラスが static であり、以下のように、二重引用符で囲まれた任意個の文字の並びとして記述されます。
"This is literally a string!"
空文字列は ""
と記述されます。
二重引用符内の文字には、エスケープ シーケンスを含めることができます。 たとえば、次のようなコードの場合、
"\t\t\"Name\"\\\tAddress\n\n"
これは次のように出力されます。
"Name"\ Address
"Name"
の前にタブが 2 つ入り、Address
の前にタブが 1 つ入ります。 この行の後に改行が 2 つ入ります。 \"
と記述することで、文字列の要素として二重引用符が含まれます。
ANSI 互換性を保つための -A オプションを付けてコンパイルした場合、エスケープ文字シーケンス "\\"
はコンパイラにより "\"
に変換されます。
文字列リテラルは内部的には、指定された文字シーケンスの末尾に NULL 文字('\0'
)が付いたデータとしてメモリに格納されます。 空文字列は、単一の '\0'
文字として格納されます。
C++11 における 4 種類の文字列リテラル
デフォルトでは、文字列リテラルは、char 文字で構成される ANSI 文字列です。 文字列リテラルの前に L
プレフィックス(接頭辞)、u
プレフィックス、U
プレフィックスを付けることで、その文字列リテラルが以下のようにワイド文字または Unicode 文字で構成されることを指定できます(「Unicode 文字型とリテラル (C++11)」を参照)。
- 直前に L の付いた文字列リテラルは、wchar_t データ型の文字で構成されるワイド文字文字列です。 wchar_t は、C プログラムで使用される場合は、stddef.h ヘッダー ファイルに定義されている型です。 C++ プログラムでは、wchar_t はキーワードです。 wchar_t 文字列のメモリ割り当ては、1 文字ごとに 2 バイトです。 単一のワイド文字の値は、実行ワイド文字セットにおけるその文字のエンコードです。
- C++11 プログラムでは、直前に u 文字の付いた文字列リテラルは、char16_t データ型の文字で構成される Unicode 文字文字列です。 C++11 プログラムでは、char16_t は 16 ビット文字型を宣言するキーワードです。char16_t は、Unicode の UTF-16 文字エンコードを定義します。char16_t 文字のメモリ割り当ては、1 文字ごとに 2 バイトまたは 4 バイトです。
- C++11 プログラムでは、直前に U 文字の付いた文字列リテラルは、char32_t データ型の文字で構成される Unicode 文字文字列です。 C++11 プログラムでは、char32_t は 32 ビット文字型を宣言するキーワードです。 char32_t は、Unicode の UTF-32 文字エンコードを定義します。 char32_t 文字のメモリ割り当ては、1 文字ごとに 4 バイトです。
つまり、C++11 プログラムでは、以下の 4 種類の文字列リテラルを使用できます。
"ANSI string"
- これは、char 文字で構成される ANSI 文字列リテラルです。
L"Wide-character string"
- この文字列リテラルは、wchar_t 文字で構成されます。
u"UTF-16 string"
- この文字列リテラルは、UTF-16 エンコードの char16_t Unicode 文字で構成されます。
U"UTF-32 string"
- この文字列リテラルは、UTF-32 エンコードの char32_t Unicode 文字で構成されます。
文字列リテラルの連結
バックスラッシュ(\
)を継続文字として使用することで、以下のように、複数行にわたる文字列定数を記述できます。
puts("This is really \ a one-line string");
ホワイトスペース(空白文字)のみで区切られた隣接する文字列リテラルは、解析の段階で連結されます。 次の例では、
#include <stdio.h> int main() { char *p; p = "This is an example of how the compiler " " will \nconcatenate very long strings for you" " automatically, \nresulting in nicer" " looking programs."; printf(p); return(0); }
このプログラムの出力は次のようになります。
This is an example of how the compiler will concatenate very long strings for you automatically, resulting in nicer looking programs.