簡體   English   中英

L“ the following:”和“ the following:”之間有什么區別

[英]What is the difference between L“the following:” and “the following:”

兩者之間有什么區別嗎? 兩者都與vs2013一起編譯。

CStringW str1 =“以下內容:”; CString str2 = L“以下:”;

字符串來自afxstr: https ://msdn.microsoft.com/en-us/library/ms174288.aspx

我知道不帶L的變體是通過適當的強制轉換運算符進行強制轉換的,但是如果我在引號之間不使用任何Unicode字符,則使用不帶L的表單會引起什么問題。 即使您不打算使用非Unicode字符,這還是使用L“”的良好編程習慣嗎?

編輯:也許我意識到了答案。 主要問題是沒有L,調用不必要的運算符方法會導致性能下降嗎? 但是,兩者給出的結果都是正確的嗎?

您使用L宏創建一個寬字符串文字。 如果沒有L它只是一個狹窄的字符串。 還要檢查您的項目設置。 您是否將其構建為Unicode項目? 我建議您不要使用L而是使用_T()宏,該宏僅在您的項目以Unicode構建時才擴展為L

看看這個頁面

因此,換句話說,如果您希望您的字符串始終為Unicode,請使用L

更新:我建議

CString str1 = _T("the following");

如果您希望將字符串擴展為寬字符串,並以Unicode格式構建項目

"the following:"的類型為const char*L"the following 's的類型為const wchar_t* 。根據對第二個文字的處理方式,您可能會隱式強制轉換,調用某些函數的重載版本,導致專門用於wchar_t而不是char類型的模板,或者代碼無法編譯(並不總是允許縮小和隱式強制轉換)請注意,從wchar_tchar (隱式或顯式)被認為是縮小的,因為通常char是1個字節,而wchar_t的大小總是更大。據我所知,是否應該對char進行signed還是不unsigned是特定於實現的;因此,從wchar_tchar甚至不會總是產生預期的結果對於后者的ascii子集-您必須檢查這些事情的標准,然后,如果您選擇L類型的文字,則程序也將需要更多的內存。與C ++一樣,您需要為使用的內容付費,所以如果不是真的 ed unicode字符,請勿使用wchar_t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM