Что именно является префиксом L в C++?
Я понимаю, что он делает: задает строковый литерал в виде const wchar_t *
(широкая строка символов) вместо const char *
(простые старые символы), но как это на самом деле определяется?
Это какой-то макрос? Это оператор для компиляторов GCC? Что это такое
3 ответа
Литеральные префиксы являются частью основного языка, так же, как и суффиксы:
'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
не имеет ничего общего с Unicode. Вот моя обширная напыщенная речь на эту тему.
Это называется префиксом кодировки:
2.14.5 Строковые литералы [lex.string]
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 wchar_t
”, Где n - размер строки, как определено ниже; он имеет статическую продолжительность хранения и инициализируется заданными символами.
Смысл L здесь широкий характер: wchar_t
, Строка с L закодирована в 16-битном, а не 8-битном, возьмем пример:
"A" = 41
L"A" = 00 41