Bir dizenin önündeki 'L', C ++ 'da ne anlama geliyor?


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

Olmadan çalışıyor gibi görünse Lde, ön ekin amacı nedir? Kullanılma şekli, sert bir C programcısı için bile bir anlam ifade etmiyor.


4
C ++ kullanmıyorsunuz. Dize hazır bilgisi yalnızca ASCII karakterleri içeriyorsa, bir C ++ / CLI programında isteğe bağlıdır. Derleyici otomatik olarak her iki şekilde de stajyer olan utf-16 kodlu dizeye dönüştürür.
Hans Passant

8
@Hans: "C ++ kullanmıyorsunuz" Nasıl biliyorsunuz?
Yörüngedeki Hafiflik Yarışları

Yanıtlar:


138

Bu bir var wchar_tgenişletilmiş karakter seti için hazır bilgi. Wikipedia'nın bu konu hakkında küçük bir tartışması ve c ++ örnekleri var.


87

'L' wchar_t, normal bir karakterin aksine, 8 bit yerine 16 bit depolama alanı gerektiren anlamına gelir . İşte bir örnek:

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

A wchar_t, basit bir karakterden iki kat büyüktür. Günlük kullanımda wchar_t kullanmanıza gerek yoktur, ancak windows.h kullanıyorsanız buna ihtiyacınız olacaktır.


28
Not: 16 bit olması gerekmez. İşletim sistemine özgüdür.
batman

3
Linux wchar_t 32 bit olduğunu düşünüyorum
user10607

8
"Günlük kullanımda wchar_t kullanmanıza gerek yok" keyfi bir jugement. Anadili İngilizce olmayan biri olarak her zaman kullanmam gerektiğini söyleyebilirim ...
Heyji

18

Bu, metnin wchar_tdüz eski charkarakterler yerine karakterler olarak depolandığı anlamına gelir .

(Başlangıçta unicode anlamına geldiğini söyledim. Bu konuda yanılmışım. Ama unicode için kullanılabilir.)


15

Bu geniş bir karakter olduğu anlamına gelir wchar_t.

1LUzun bir değer olmaya benzer .


14

Bunun anlamı wchar_tdar karakterler ( char) yerine geniş karakter ( ) dizisidir .

Farklı bir karakterden oluşan bir dize, mutlaka bir Unicode dize değil .


11

L, geniş teller için kullanılan bir önektir. Her karakter birkaç bayt kullanır (boyutuna bağlı olarak wchar_t). Kullanılan kodlama bu önekten bağımsızdır. Demek istediğim, buradaki diğer cevaplarda belirtildiği gibi mutlaka UTF-16 olmamalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.