2011-04-15 139 views
10

這是做什麼用的?L做了什麼?

const wchar_t *s = L"test"; 

如果wchar_t的是我的機器上兩個字節,那麼我們爲什麼要告訴大家,字符串應的方式,每個元素都是長即待處理的編譯器,在尺寸字節?

+0

不應該是** const wchar_t * s **? – pic11 2011-04-16 00:51:00

回答

5

如有疑問,參考標準(§6.4.5,字符串):

字符串文字是零 序列或多個多字節包含在雙引號 字符, ,如"xyz"。甲寬字符串文字是 相同的,除了由 信L前綴。

注意,它表示每個字符是一個long,儘管用相同的字母long字面後綴被前綴。

15

L表示字符串是字符串wchar_t而不是普通字符串char字符。我不確定你從哪裏得到了大約四個字節的位。

從規範部6.4.5字符串文本,第2段:

字符串文字是包含在雙引號零個或多個多字節字符的序列,如在"xyz"。甲寬字符串文字是相同的,除了由字母L前綴。

並從第5段的摘錄:

對於字符串文字,陣列元素具有類型char,並且與多字節字符序列的各個字節初始化;對於寬字符串文字,陣列元素具有類型wchar_t,並與對應於該多字節字符 序列寬字符序列被初始化,通過與實現定義當前區域的mbstowcs函數所定義的。

+0

OP可能認爲「L」意思是「長」,即32位。 – 2011-04-15 16:55:10

+0

@JSBangs,但是`long`不一定是4個字節(甚至32位)... – 2011-04-15 17:19:47

+1

是的,但OP可能不知道。公平起見,這是一個很容易犯的錯誤,因爲「L」後綴在一個整數常量* *上會變成一個「長」(通常爲32位)。只要說OP是困惑的就夠了。 – 2011-04-15 17:22:57

2

它表示一個寬字符串,類型爲wchar_t

2

如果你不知道L是做什麼的,那麼你爲什麼要對每個數組元素long(「4字節大小」)作出斷言陳述? long的想法從哪裏來的?

Llong有很多關係,因爲它必須「妖精」 - 根本沒有關係。前綴L表示以下字符串文字由寬字符組成,即每個字符都有wchar_t類型。

P.S.最後,指向字符串文字時使用const限定指針總是個好主意:const wchar_t *s = L"test";

5

L並不意味着long integer爲字符串添加前綴時。這意味着字符串中的每個字符都是寬字符。

如果沒有此前綴,您將指定一個char字符串到wchar_t指針,這將是不匹配的。