Я понимаю, что он делает: задает строковый литерал в виде 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
Обратите внимание, что wchar_t
имеет ничего такого делать с Юникодом. Вот расширенная моя напыщенная речь по теме.
Это называется префикс кодирования:
string-literal
:
|encoding-prefix
opt
»s-char-sequenceopt
«
|encoding-prefix
opt
рraw-string
encoding-prefix
:
|u8
|u
|U
|L
и отмечает широкий строковый литерал:
11) Строковый литерал, который начинается с
L
, такие какL"asdf"
, широкий
строковый литерал. Широкий строковый литерал имеет тип «массивn
const
”, Где n — размер строки, как определено ниже; она имеет
wchar_t
статическая длительность хранения и инициализируется заданными символами.
Смысл L здесь широкий характер: wchar_t
, Строка с L закодирована в 16-битном, а не 8-битном, возьмем пример:
"A" = 41
L"A" = 00 41