Chữ 'L' phía trước một chuỗi có nghĩa gì trong C ++?


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

Mặc dù nó dường như hoạt động mà không có L, mục đích của tiền tố là gì? Cách nó được sử dụng thậm chí không có ý nghĩa đối với một lập trình viên C khó tính.


4
Bạn không sử dụng C ++. Nó là tùy chọn trong chương trình C ++ / CLI nếu chuỗi ký tự chỉ chứa các ký tự ASCII. Trình biên dịch tự động chuyển đổi nó thành một chuỗi được mã hóa utf-16 được thực hiện theo bất kỳ cách nào.
Hans Passant

7
@Hans: "Bạn không sử dụng C ++" Làm sao bạn biết?
Các cuộc đua nhẹ nhàng trong quỹ đạo

Câu trả lời:


138

Đó là một wchar_tnghĩa đen, cho bộ ký tự mở rộng. Wikipedia có một cuộc thảo luận nhỏ về chủ đề này và các ví dụ về c ++.


87

'L' có nghĩa là wchar_t, trái ngược với một ký tự bình thường, yêu cầu lưu trữ 16 bit thay vì 8 bit. Đây là một ví dụ:

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

A wchar_tlà hai lần lớn như một char đơn giản. Trong sử dụng hàng ngày, bạn không cần sử dụng wchar_t, nhưng nếu bạn đang sử dụng windows.h bạn sẽ cần nó.


28
lưu ý: không nhất thiết phải là 16 bit. Đó là hệ điều hành cụ thể.
dơi

3
Tôi nghĩ rằng trong linux wchar_t là 32 bit
user10607

8
"Trong sử dụng hàng ngày, bạn không cần phải sử dụng wchar_t" là sự tùy tiện. Là một người không nói tiếng Anh bản ngữ, tôi có thể nói rằng tôi phải sử dụng nó mọi lúc ...
Heyji

18

Nó có nghĩa là văn bản được lưu trữ dưới dạng wchar_tký tự chứ không phải là charký tự cũ đơn giản .

(Ban đầu tôi nói nó có nghĩa là unicode. Tôi đã sai về điều đó. Nhưng nó có thể được sử dụng cho unicode.)


15

Nó có nghĩa là nó là một nhân vật rộng wchar_t.

Tương tự như 1Llà một giá trị dài.


14

Nó có nghĩa là một mảng các ký tự rộng ( wchar_t) thay vì các ký tự hẹp ( char).

Đây chỉ là một chuỗi của một loại ký tự khác, không nhất thiết phải là chuỗi Unicode .


11

L là tiền tố được sử dụng cho các chuỗi rộng. Mỗi ký tự sử dụng một vài byte (tùy thuộc vào kích thước của wchar_t). Mã hóa được sử dụng là độc lập với tiền tố này. Ý tôi là nó không nhất thiết phải là UTF-16 không giống như đã nêu trong các câu trả lời khác ở đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.