Cosa significa la "L" davanti a una stringa in C ++?


174
this->textBox1->Name = L"textBox1";

Anche se sembra funzionare senza il L, qual è lo scopo del prefisso? Il modo in cui viene utilizzato non ha nemmeno senso per un programmatore C hardcore.


4
Non stai usando C ++. È facoltativo in un programma C ++ / CLI se la stringa letterale contiene solo caratteri ASCII. Il compilatore lo converte automaticamente in una stringa codificata utf-16 che viene internata in entrambi i modi.
Hans Passant,

7
@Hans: "Non stai usando C ++" Come fai a saperlo?
Corse di leggerezza in orbita

Risposte:


138

È wchar_tletterale, per un set di caratteri esteso. Wikipedia ha una piccola discussione su questo argomento ed esempi c ++.


87

'L' significa wchar_tche, a differenza di un carattere normale, richiede 16 bit di memoria anziché 8 bit. Ecco un esempio:

"A"    = 41
"ABC"  = 41 42 43
L"A"   = 00 41
L"ABC" = 00 41 00 42 00 43

A wchar_tè due volte più grande di un semplice carattere. Nell'uso quotidiano non è necessario utilizzare wchar_t, ma se si utilizza windows.h ne avrai bisogno.


28
nota: non è necessariamente a 16 bit. È specifico del sistema operativo.
Batman,

3
Penso che in Linux wchar_t sia a 32 bit
user10607 il

8
"Nell'uso quotidiano non è necessario utilizzare wchar_t" è una punizione arbitraria. Come madrelingua inglese, posso dire che devo usarlo tutto il tempo ...
Heyji,

18

Significa che il testo è memorizzato come wchar_tcaratteri piuttosto che semplici vecchi charcaratteri.

(Inizialmente avevo detto che significava Unicode. Mi sbagliavo. Ma può essere usato per Unicode.)


15

Ciò significa che si tratta di un personaggio di larghezza, wchar_t.

Simile ad 1Lessere un valore lungo.


14

Significa che è un array di caratteri larghi ( wchar_t) anziché caratteri stretti ( char).

È solo una stringa di un diverso tipo di carattere, non necessariamente una stringa Unicode .


11

L è un prefisso usato per stringhe larghe. Ogni personaggio utilizza diversi byte (a seconda della dimensione di wchar_t). La codifica utilizzata è indipendente da questo prefisso. Voglio dire, non deve essere necessariamente UTF-16 a differenza di quanto indicato in altre risposte qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.