我是C ++的新手,我很难完全理解数据类型的用法。
我将这些变量应用于createwindow参数以及带有它的类。这需要LPCWSTR数据类型。
LPCWSTR szTitle = L"Hello";
LPCWSTR szWindowClass = L"There";
因此,我这样做了,但是,我不明白为什么我必须在字符串之前包含L(调试器把它放在那里说实话)。我也经常看到字符串被定义为直接类型(相反,我经常看到WCHAR,char等)。如果你要制作这些变量,你会怎么写呢?我不相信我应该使用LPCWSTR。再说一遍,我很新,我无法找到我在网上寻找的确切内容。
答案 0 :(得分:5)
C ++有几种不同的字符类型,这里的问题是char
和wchar_t
,wchar_t
是某些实现的宽字符 - 定义的类型。 C ++中的字符串文字被视为字符数组,因此您可以编写
const char* rawString = "I'm a regular old string!";
因为char
和wchar_t
不一定是同一类型,所以你不能写
const wchar_t* rawString = "I'm a regular old string!"; // Error!
因为类型不匹配:右侧有char
个数组,左侧有const wchar_t*
类型的指针。因此,C ++允许您通过在字符串文字前加L
前缀来定义宽字符串文字。结果字符串是wchar_t
类型的元素数组,所以这将编译:
const wchar_t* rawString = L"I'm a wide string!"; // Totally fine!
Microsoft的别名LPCWSTR
基本上是const wchar_t*
,这就是您需要L
前缀的原因。
答案 1 :(得分:0)
有一种方法可以通过项目设置使用TCHAR类型和相关函数以及宏来安装Ansi和Unicode,但Ansi最后用于Windows NT和旧版本。切换到Unicode是为Windows 2000及更高版本完成的,因此tchar的东西是遗留的,但Visual Studio仍会在某些类型的项目上使用tchar创建默认应用程序。
http://msdn.microsoft.com/en-us/library/windows/desktop/ff381407(v=vs.85).aspx
还有一些基于TCHAR的字符串函数。
对于字符串而不是L,您可以使用TEXT()宏
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374074(v=vs.85).aspx
例如TEXT(“示例字符串”)。这将根据字符集的项目设置创建ansi字符串或unicode字符串。您需要为TEXT宏包含windows.h。
同样,这是遗留代码,但如果Visual Studio为您创建默认源程序,它可能会使用与TCHAR相关的东西。