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
opt
“s-char-sequenceopt
”
|encoding-prefix
opt
Rraw-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