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

C++ C+中的LPWSTR、wchar_t*和无符号短指针+;,c++,pointers,unsigned,short,wchar,C++,Pointers,Unsigned,Short,Wchar,我想知道这些类型是否都一样。我在windows.h中有这个函数:GetCommandLine(),在UNICODE模式下,它返回一个LPWSTR。现在,如果我深入研究,我可以看到LPWSTR是如何wchar\u t*的,如果我进一步研究,我会发现wchar\u t是无符号短(16字节)或无符号长(32字节)。然而,如果我这样做: unsigned short* SysComm = GetCommandLine(); 我得到这个错误: 无法在初始化中从“LPWSTR{aka wchar_t*}转

我想知道这些类型是否都一样。我在windows.h中有这个函数:
GetCommandLine()
,在
UNICODE
模式下,它返回一个
LPWSTR
。现在,如果我深入研究,我可以看到
LPWSTR
是如何
wchar\u t*
的,如果我进一步研究,我会发现
wchar\u t
无符号短
(16字节)或
无符号长
(32字节)。然而,如果我这样做:

unsigned short* SysComm = GetCommandLine();
我得到这个错误:

无法在初始化中从“LPWSTR{aka wchar_t*}转换为“short unsigned int*”


那么,编译器是否遵循相同的逻辑来发现
LPWSTR
最终是
无符号短*
,还是我错了?

wchar\u t
是一种不同的类型,定义为具有与其他整数类型相同的属性

类型
wchar\u t
是一种独特的类型[…]。类型
wchar\u t
应具有与其他整体类型(称为基础类型)相同的尺寸、标志性和对齐要求(3.11)


因此,您不能隐式地从
wchar\u t*
转换为
short*
,就像从
int*
转换为
short*

一样,但我可以从int*转换为short*,例如?@ali不能隐式转换。你可以通过一个
重新解释
,但这不是一个好主意。您可以从
int
转换为
short
,但不能在指向每个int
的指针之间转换。谢谢。因此,如果我说
typedef int myint
那么
myint
int
对于编译器来说是不一样的,即使它们的大小相同,对吧?@ali A
typedef
是不同的。它们不是强类型的。在这种情况下,
myint
int
将被视为相同
wchar\u t
不仅仅是
typedef
ed类型。