這是做什麼用的?L做了什麼?
const wchar_t *s = L"test";
如果wchar_t的是我的機器上兩個字節,那麼我們爲什麼要告訴大家,字符串應的方式,每個元素都是長即待處理的編譯器,在尺寸字節?
這是做什麼用的?L做了什麼?
const wchar_t *s = L"test";
如果wchar_t的是我的機器上兩個字節,那麼我們爲什麼要告訴大家,字符串應的方式,每個元素都是長即待處理的編譯器,在尺寸字節?
如有疑問,參考標準(§6.4.5,字符串):
甲字符串文字是零 序列或多個多字節包含在雙引號 字符, ,如
"xyz"
。甲寬字符串文字是 相同的,除了由 信L
前綴。
注意,它不表示每個字符是一個long
,儘管用相同的字母long
字面後綴被前綴。
L
表示字符串是字符串wchar_t
而不是普通字符串char
字符。我不確定你從哪裏得到了大約四個字節的位。
從規範部6.4.5字符串文本,第2段:
甲字符串文字是包含在雙引號零個或多個多字節字符的序列,如在
"xyz"
。甲寬字符串文字是相同的,除了由字母L
前綴。
並從第5段的摘錄:
對於字符串文字,陣列元素具有類型
char
,並且與多字節字符序列的各個字節初始化;對於寬字符串文字,陣列元素具有類型wchar_t
,並與對應於該多字節字符 序列寬字符序列被初始化,通過與實現定義當前區域的mbstowcs
函數所定義的。
OP可能認爲「L」意思是「長」,即32位。 – 2011-04-15 16:55:10
@JSBangs,但是`long`不一定是4個字節(甚至32位)... – 2011-04-15 17:19:47
是的,但OP可能不知道。公平起見,這是一個很容易犯的錯誤,因爲「L」後綴在一個整數常量* *上會變成一個「長」(通常爲32位)。只要說OP是困惑的就夠了。 – 2011-04-15 17:22:57
它表示一個寬字符串,類型爲wchar_t
。
如果你不知道L
是做什麼的,那麼你爲什麼要對每個數組元素long
(「4字節大小」)作出斷言陳述? long
的想法從哪裏來的?
那L
與long
有很多關係,因爲它必須「妖精」 - 根本沒有關係。前綴L
表示以下字符串文字由寬字符組成,即每個字符都有wchar_t
類型。
P.S.最後,指向字符串文字時使用const限定指針總是個好主意:const wchar_t *s = L"test";
。
L
並不意味着long integer
爲字符串添加前綴時。這意味着字符串中的每個字符都是寬字符。
如果沒有此前綴,您將指定一個char
字符串到wchar_t
指針,這將是不匹配的。
不應該是** const wchar_t * s **? – pic11 2011-04-16 00:51:00