C ++中的L前缀究竟是什么?

时间:2012-10-26 12:48:46

标签: c++ string widestring

我理解它的作用:将字符串文字指定为const wchar_t *(宽字符串)而不是const char *(普通旧字符),但它是如何实际定义的?

它是某种宏吗?它是GCC编译器的运算符吗?什么是 它?

3 个答案:

答案 0 :(得分:64)

文字前缀是核心语言的一部分,很像后缀:

'a'    // type: char
L'a'   // type: wchar_t

"a"    // type: char[2]
L"a"   // type: wchar_t[2]
U"a"   // type: char32_t[2]

1      // type: int
1U     // type: unsigned int

0.5    // type: double
0.5f   // type: float
0.5L   // type: long double

请注意wchar_t nothing 与Unicode有关。这是关于该主题的extended rant of mine

答案 1 :(得分:18)

它被称为编码前缀

2.14.5字符串文字[lex.string]

  

string-literal
     | encoding-prefix opt s-char-sequenceopt
     | encoding-prefix opt R raw-string
    encoding-prefix
       | u8
       | u
       | U
       | L

并标记一个宽字符串文字:

  

11)以L开头的字符串文字(例如L"asdf")很宽   字符串字面量。宽字符串文字的类型为“n const wchar_t”数组,其中n是字符串的大小,如下所示;它有   静态存储持续时间并使用给定的字符进行初始化。

答案 2 :(得分:6)

这里L的含义是广义的:wchar_t。带L的字符串以16位而不是8位编码,例如:

"A"    = 41
L"A"   = 00 41