为什么我需要在字符串前面加一个L并正确创建这个变量?

Joh*_*ver 4 c++ string wchar-t

我是C++的新手,我很难完全理解数据类型的用法.

我将这些变量应用于createwindow参数和带有它的类.这采用LPCWSTR数据类型.

LPCWSTR szTitle = L"Hello";
LPCWSTR szWindowClass = L"There";
Run Code Online (Sandbox Code Playgroud)

因此,我这样做,虽然,我不明白为什么我必须在字符串之前包含L(调试器把它放在那里说实话).我也经常看到字符串被定义为直接类型(相反,我经常看到WCHAR,char等).如果你要制作这些变量,你会怎么写呢?我不相信我应该使用LPCWSTR.再说一遍,我很新,我无法找到我在网上寻找的确切内容.

tem*_*def 6

C++有几种不同的字符类型,这里讨论的是charwchar_t,并且wchar_t是一些实现定义类型的宽字符.C++中的字符串文字被视为一个字符数组,因此您可以编写

const char* rawString = "I'm a regular old string!";
Run Code Online (Sandbox Code Playgroud)

因为charwchar_t不一定是同一类型,也可以不写

const wchar_t* rawString = "I'm a regular old string!"; // Error!
Run Code Online (Sandbox Code Playgroud)

因为存在类型不匹配的问题:char右侧有一个s 数组,左侧有一个类型的指针const wchar_t*.因此,C++允许您通过为字符串文字添加前缀来定义宽字符串文字L.结果字符串是一个类型的元素数组wchar_t,所以这将编译:

const wchar_t* rawString = L"I'm a wide string!"; // Totally fine!
Run Code Online (Sandbox Code Playgroud)

微软的别名LPCWSTR基本上是一个const wchar_t*,这就是你需要L前缀的原因.