I understand what it does: specifies a string literal as a const wchar_t *
(wide character string) instead of const char *
(plain old characters), but how is it actually defined?
Is it a macro of some sort? Is it an operator for GCC compilers? What is it?
The literal prefixes are a part of the core language, much like the suffixes:
'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
Note that wchar_t
has nothing to do with Unicode. Here is an extended rant of mine on the topic.
It's called an encoding prefix:
2.14.5 String literals [lex.string]
string-literal
:
| encoding-prefix
opt
" s-char-sequenceopt
"
| encoding-prefix
opt
R raw-string
encoding-prefix
:
| u8
| u
| U
| L
and marks a wide string literal:
11) A string literal that begins with L
, such as L"asdf"
, is a wide
string literal. A wide string literal has type “array of n
const
wchar_t
”, where n is the size of the string as defined below; it has
static storage duration and is initialized with the given characters.
The meaning of L here is wide character: wchar_t
. String with L is coded in 16bit rather than 8bit, take an example:
"A" = 41
L"A" = 00 41