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

我明白它是什么:指定一个string文字为const wchar_t * (宽字符string),而不是const char * (普通的旧字符),但它是如何定义的?

这是某种macros吗? 它是GCC编译器的运营商吗? 这什么?

字面前缀是核心语言的一部分,非常像后缀:

 '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与Unicode 无关 。 这是我在这个话题上的一个大肆咆哮 。

它被称为编码前缀

2.14.5string文字[lex.string]

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

并标记一个宽string文字:

11)以L开头的string文字,例如L"asdf" ,是一个宽string文字。 宽string文字的types为“ n const wchar_t数组”,其中n是下面定义的string的大小; 它具有静态存储持续时间,并用给定的字符进行初始化。

这里的L的含义是宽字符: wchar_t 。 带L的string是用16bit而不是8bit编码的,举个例子:

 "A" = 41 L"A" = 00 41 
    Interesting Posts