Что такое префикс L в С++?
Я понимаю, что он делает: указывает строковый литерал как const wchar_t *
(широкая символьная строка) вместо const char *
(простые старые символы), но как это определяется?
Это какой-то макрос? Является ли он оператором для компиляторов GCC? Что это?
Ответы
Ответ 1
Литеральные префиксы являются частью основного языка, подобно суффиксам:
'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
Он назвал префикс кодировки:
2.14.5 Строковые литералы [lex.string]
string-literal
:
| encoding-prefix
opt
" s-char-sequenceopt
"
| encoding-prefix
opt
R raw-string
encoding-prefix
:
| u8
| u
| u
| L
и отмечает широкий строковый литерал:
11) Строковый литерал, начинающийся с L
, например L"asdf"
, является широким строковый литерал. Широкий строковый литерал имеет тип "массив n
const
wchar_t
", где n - размер строки, как определено ниже; в нем есть статической продолжительности хранения и инициализируется заданными символами.
Ответ 3
Значение L здесь имеет широкий характер: wchar_t
. Строка с L кодируется в 16 бит, а не в 8 бит, возьмите пример:
"A" = 41
L"A" = 00 41