Что такое префикс L в C++?
Я понимаю, что он делает: указывает строковый литерал как const wchar_t *
(широкая символьная строка) вместо const char *
(простые старые символы), но как это на самом деле определено?
это какой-то макрос? Является ли он оператором для компиляторов GCC? Что?!--5-- > is это?
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
Rraw-string
encoding-prefix
:
|u8
|u
|U
|L
и помечает строку литерал:
11) строковый литерал, который начинается с
L
, напримерL"asdf"
, широкий строковый литерал. Широкий строковый литерал имеет тип " array ofn
const wchar_t
", где N-размер строки, как определено ниже; он статическая длительность хранения и инициализируется заданными символами.
значение L здесь является широким символом:wchar_t
. Строка с L кодируется в 16bit, а не 8bit, возьмем пример:
"A" = 41
L"A" = 00 41