'L' ข้างหน้าสตริงหมายถึงอะไรใน C ++


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

แม้ว่ามันจะทำงานได้โดยไม่ต้องLมีวัตถุประสงค์ของคำนำหน้าคืออะไร? วิธีการใช้ไม่ได้ทำให้รู้สึกถึงโปรแกรมเมอร์ C ง่าย ๆ


4
คุณไม่ได้ใช้ C ++ มันเป็นตัวเลือกในโปรแกรม C ++ / CLI ถ้าตัวอักษรสตริงมีเพียงตัวอักษร ASCII คอมไพเลอร์แปลงเป็นสตริงที่เข้ารหัส utf-16 โดยอัตโนมัติ
Hans Passant

7
@Hans: "คุณไม่ได้ใช้ C ++"คุณรู้ได้อย่างไร?
การแข่งขัน Lightness ใน Orbit

คำตอบ:


138

มันเป็นwchar_tตัวอักษรสำหรับชุดอักขระแบบขยาย Wikipediaมีการอภิปรายเล็กน้อยในหัวข้อนี้และตัวอย่าง c ++


87

'L' หมายถึงwchar_tซึ่งตรงกันข้ามกับอักขระปกติต้องใช้หน่วยความจำ 16 บิตแทนที่จะเป็น 8 บิต นี่คือตัวอย่าง:

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

A wchar_tมีขนาดใหญ่เป็นสองเท่าของถ่านธรรมดา ในการใช้งานทุกวันคุณไม่จำเป็นต้องใช้ wchar_t แต่ถ้าคุณใช้ windows.h คุณจะต้องใช้มัน


28
หมายเหตุ: มันไม่จำเป็นต้องเป็น 16 บิต มันเป็นระบบปฏิบัติการที่เฉพาะเจาะจง
แบทแมน

3
ฉันคิดว่าใน linux wchar_t คือ 32 bits
user10607

8
"ในการใช้งานทุกวันคุณไม่จำเป็นต้องใช้ wchar_t" เป็นวิธีการตัดสินโดยพลการ ในฐานะที่เป็นภาษาอังกฤษไม่ใช่พื้นเมืองผมสามารถพูดได้ว่าผมต้องใช้มันตลอดเวลา ...
Heyji

18

มันหมายถึงข้อความที่ถูกเก็บไว้เป็นwchar_tตัวละครมากกว่าcharตัวอักษรเก่าธรรมดา

(เดิมทีฉันบอกว่ามันหมายถึงยูนิโค้ดฉันผิดเกี่ยวกับเรื่องนั้น แต่มันสามารถใช้เป็น Unicode ได้)



14

หมายความว่าเป็นอาร์เรย์ของตัวอักษรกว้าง ( wchar_t) แทนที่จะเป็นตัวอักษรแคบ ( char)

มันเป็นเพียงแค่สตริงของชนิดที่แตกต่างของตัวละครที่ไม่จำเป็นต้องเป็นสายอักขระ Unicode


11

L เป็นคำนำหน้าที่ใช้สำหรับสตริงแบบกว้าง อักขระแต่ละตัวใช้หลายไบต์ (ขึ้นอยู่กับขนาดwchar_t) การเข้ารหัสที่ใช้เป็นอิสระจากคำนำหน้านี้ ฉันหมายความว่ามันจะต้องไม่จำเป็นต้องเป็น UTF-16 ซึ่งต่างจากที่ระบุไว้ในคำตอบอื่น ๆ ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.