Подтвердить что ты не робот

Что такое префикс L в С++?

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

Это какой-то макрос? Является ли он оператором для компиляторов GCC? Что это?

4b9b3361

Ответ 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