string — Что именно является префиксом L в C ++?

Я понимаю, что он делает: задает строковый литерал в виде const wchar_t * (широкая строка символов) вместо const char * (простые старые символы), но как это на самом деле определяется?

Это какой-то макрос? Это оператор для компиляторов GCC? Какие является Это?

37

Решение

Литеральные префиксы являются частью основного языка, так же, как и суффиксы:

'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 имеет ничего такого делать с Юникодом. Вот расширенная моя напыщенная речь по теме.

60

Другие решения

Это называется префикс кодирования:

2.14.5 Строковые литералы [lex.string]

string-literal:
| encoding-prefixopt» s-char-sequenceopt«
| encoding-prefixoptр raw-string
encoding-prefix:
| u8
| u
| U
| L

и отмечает широкий строковый литерал:

11) Строковый литерал, который начинается с L, такие как L"asdf", широкий
строковый литерал. Широкий строковый литерал имеет тип «массив n const
wchar_t
”, Где n — размер строки, как определено ниже; она имеет
статическая длительность хранения и инициализируется заданными символами.

18

Смысл L здесь широкий характер: wchar_t, Строка с L закодирована в 16-битном, а не 8-битном, возьмем пример:

"A"    = 41
L"A"   = 00 41
6
По вопросам рекламы [email protected]