C++中的L前缀到底是什么意思?

65
我了解它的作用:将字符串文字指定为const wchar_t *(宽字符字符串),而不是const char *(普通字符),但它实际上是如何定义的呢?
它是某种宏吗?它是GCC编译器的运算符吗?它到底是什么?
3个回答

91

字面前缀与后缀一样,是核心语言的一部分:

'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没有任何关系。这里是我在该主题上的详细描述


3
谢谢,将其与浮点数后缀联系起来,我明白了! - user965369
2
这里有另一个关于wchar_t和Unicode的好解释。 (https://dev59.com/02gu5IYBdhLWcg3wv5ca) - Yakov Galka

21
这被称为“编码前缀”:
2.14.5字符串字面量[lex.string]
string-literal: | encoding-prefix(可选)" s-char-sequence(可选)" | encoding-prefix(可选)R raw-string
encoding-prefix: | u8 | u | U | L
并标志宽字符串文字:
11)以L开头的字符串文本,例如L“asdf”,是宽字符串文字。 宽字符串文字的类型为“nconst wchar_t 字符的数组”,其中n是下面定义的字符串的大小; 它具有静态存储期,并使用给定的字符进行初始化。

8

L在这里的意思是宽字符:wchar_t。带有L的字符串编码为16位而不是8位,举个例子:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接