文字定数
文字定数の概要:インデックス への移動
字定数は、1 つ以上の文字が単一引用符で囲まれたもので、'A'
、'+'
、'\n'
などがあります。 C では、1 文字定数のデータ型は int になります。 C++ では、文字定数のデータ型は Char になります。 C も C++ の場合も、複数文字定数のデータ型は int になります。
文字定数についての詳細については、以下のトピックを参照してください: 「3 種類の文字型」、「エスケープシーケンス」「ワイド文字定数と複数文字定数」、「Unicode 文字型とリテラル(C++0x)」。
C および C++ における文字型のサイズ
文字型のサイズを比較するには、以下のソースコードを C プログラムとしてコンパイルした後、C++ プログラムとしてコンパイルします。
#include <stdio.h> #define CH 'x' /* A CHARACTER CONSTANT */ void main(void) { char ch = 'x'; /* A char VARIABLE */ printf("\nSizeof int = %d", sizeof(int) ); printf("\nSizeof char = %d", sizeof(char) ); printf("\nSizeof ch = %d", sizeof(ch) ); printf("\nSizeof CH = %d", sizeof(CH) ); printf("\nSizeof wchar_t = %d", sizeof(wchar_t) ); }
メモ: サイズはバイト単位です。
C および C++ における文字型のサイズ:
C プログラムとしてコンパイルした場合の出力 | C++ プログラムとしてコンパイルした場合の出力 |
---|---|
Sizeof int = 4 |
Sizeof int = 4 |
Sizeof char = 1 |
Sizeof char = 1 |
Sizeof ch = 1 |
Sizeof ch = 1 |
Sizeof CH = 4 |
Sizeof ch = 1 |
Sizeof wchar_t = 2 |
Sizeof wchar_t = 2 |
C++0x における 4 種類の文字リテラル
デフォルトでは、C++ の文字リテラルは Char データ型の ANSI 文字で構成されます。 C++ および C++0x では、文字リテラルの前に L
プレフィックス(接頭辞)を付けることで、その文字リテラルが Wchar t データ型のワイド文字で構成されることを指定できます。 C++0x では、文字リテラルの前に u
や U
接頭辞を付けることで、その文字リテラルが UTF-16(Char16 t データ型)または UTF-32(Char32 t データ型)エンコーディングの、Unicode 文字で構成されることを指定できます(「Unicode 文字型とリテラル(C++0x)」)。
C++0x プログラムでは、たとえば、以下のような文字リテラルを使用できます。
'A'
- これは char データ型の ANSI 文字です。 この文字リテラルには 1 バイトのメモリが割り当てられます。L'A'
- これは、wchar_t データ型のワイド文字です。 この文字リテラルには 2 バイトのメモリが割り当てられます。u'A'
- これは、UTF-16 でエンコードされた char16_t データ型の Unicode 文字です。 この文字リテラルには、(この文字が基本多言語面に属しているかどうかによって)2 バイトまたは 4 バイトのメモリが割り当てられます。U'A'
- これは、UTF-32 でエンコードされた char32_t データ型の Unicode 文字です。 この文字リテラルには 4 バイトのメモリが割り当てられます。