C++ 中的 LPWSTR、wchar_t* 和无符号短指针

Posted

技术标签:

【中文标题】C++ 中的 LPWSTR、wchar_t* 和无符号短指针【英文标题】:LPWSTR, wchar_t* and unsigned short pointer in C++ 【发布时间】:2013-04-20 10:28:17 【问题描述】:

我试图了解这些类型是否都相同。我从 windows.h 获得了这个函数:GetCommandLine(),在UNICODE 模式下,它返回一个LPWSTR。现在,如果我深入挖掘,我可以看到LPWSTRwchar_t*,如果我更进一步,我会发现wchar_tunsigned short(16 字节)或unsigned long(32 字节)。然而,如果我这样做:

unsigned short* SysComm = GetCommandLine();

我收到此错误:

无法在初始化中从 'LPWSTR aka wchar_t* 转换为 'short unsigned int*'

那么,编译器是否遵循相同的逻辑来找出 LPWSTR 到底是 unsigned short* 还是我错了?

【问题讨论】:

【参考方案1】:

wchar_t 是一种独特的类型,被定义为与其他整数类型具有相同的属性。

类型wchar_t 是一个独特的类型[...]。类型 wchar_t 应具有与称为其基础类型的其他整数类型之一相同的大小、符号和对齐要求 (3.11)。

因此,您不能像从 int*short* 一样隐式地从 wchar_t* 转换为 short*

【讨论】:

但是,例如,我可以从 int* 转换为 short* 吗? @ali 不是隐含的。你可以用reinterpret_cast 来做,但这不是一个好主意。您可以从 int 转换为 short,但不能在指向它们每个的指针之间转换。 谢谢。所以,如果我说typedef int myint,那么myintint 对于编译器来说是不一样的,即使它们的大小相同,对吧? @ali A typedef 不同。它们不是强类型的。在这种情况下,myintint 将被视为相同。 wchar_t 不仅仅是 typedefed 类型。

以上是关于C++ 中的 LPWSTR、wchar_t* 和无符号短指针的主要内容,如果未能解决你的问题,请参考以下文章

WinAPI LPWSTR,C++11 u16string?

如何搜索 LPWSTR 的子字符串?

在 VC++ 中将 TCHAR 转换为 LPWSTR?

怎么把char型数组转换为lpwstr

ANSI与Unicode编码,TCHAR | LPSTR | LPCSTR | LPWSTR | LPCWSTR | LPTSTR | LPCTSTR 的含义

C++中的WCHAR_T怎么转化成CHAR?