文字定数
文字定数の概要:インデックス への移動
文字定数は、1 つ以上の文字が一重引用符で囲まれたもの(たとえば 'A'
、'+'
、'\n'
など)です。 C では、1 文字定数のデータ型は int になります。 C++ では、文字定数のデータ型は char になります。 C の場合も C++ の場合も、複数文字定数のデータ型は int になります。
文字定数の詳細については、次のトピックを参照してください。:「3 種類の文字型」、「エスケープ シーケンス」、「ワイド文字定数と複数文字定数」、「Unicode 文字型とリテラル(C++11)」。
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++11 における 4 種類の文字リテラル
デフォルトでは、C++ の文字リテラルは char データ型の ANSI 文字で構成されます。 C++ および C++11 では、文字リテラルの前に L
プレフィックス(接頭辞)を付けることで、その文字リテラルが wchar_t データ型のワイド文字で構成されることを指定できます。 C++11 では、文字リテラルの前に u
や U
接頭辞をつけることで、その文字リテラルが Unicode 文字を UTF-16(char16_t データ型)または UTF-32(char32_t データ型)エンコーディングで、含んでいることを指定することができます(「Unicode 文字型とリテラル(C++11)」参照)。
C++11 プログラムでは、たとえば、以下のような文字リテラルを使用できます。
'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 バイトのメモリが割り当てられます。