私はそれが何をするのか理解しています:文字列リテラルconst wchar_t *を(プレーンな古い文字)ではなく(ワイド文字文字列)として指定しますconst char *が、実際にはどのように定義されていますか?
それはある種のマクロですか?GCCコンパイラの演算子ですか?それはなんですか?
私はそれが何をするのか理解しています:文字列リテラルconst wchar_t *を(プレーンな古い文字)ではなく(ワイド文字文字列)として指定しますconst char *が、実際にはどのように定義されていますか?
それはある種のマクロですか?GCCコンパイラの演算子ですか?それはなんですか?
リテラルプレフィックスは、サフィックスと同様に、コア言語の一部です。
'a' // type: char
L'a' // type: wchar_t
"a" // type: char[2]
L"a" // type: wchar_t[2]
U"a" // type: char32_t[2]
1 // type: int
1U // type: unsigned int
0.5 // type: double
0.5f // type: float
0.5L // type: long double
これはUnicodeとは何のwchar_t関係もないことに注意してください。これは、このトピックに関する私の拡張された暴言です。
これはエンコーディングプレフィックスと呼ばれます:
string-literal:
|encoding-prefixopt"s-char-sequenceopt"
|encoding-prefixoptRraw-string
encoding-prefix:
|u8
|u
|U
|L
幅の広い文字列リテラルをマークします。
L11) 、などで始まる文字列リテラルL"asdf"は、幅の広い文字列リテラルです。幅の広い文字列リテラルの型は「arrayofnconst wchar_t」です。ここで、nは以下に定義する文字列のサイズです。静的な保存期間があり、指定された文字で初期化されます。
ここでのLの意味は、ワイド文字ですwchar_t。Lの文字列は、8ビットではなく16ビットでコード化されています。例を見てみましょう。
"A" = 41
L"A" = 00 41