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
。现在,如果我深入挖掘,我可以看到LPWSTR
是wchar_t*
,如果我更进一步,我会发现wchar_t
是unsigned 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
,那么myint
和int
对于编译器来说是不一样的,即使它们的大小相同,对吧?
@ali A typedef
不同。它们不是强类型的。在这种情况下,myint
和 int
将被视为相同。 wchar_t
不仅仅是 typedef
ed 类型。以上是关于C++ 中的 LPWSTR、wchar_t* 和无符号短指针的主要内容,如果未能解决你的问题,请参考以下文章
WinAPI LPWSTR,C++11 u16string?
ANSI与Unicode编码,TCHAR | LPSTR | LPCSTR | LPWSTR | LPCWSTR | LPTSTR | LPCTSTR 的含义