wchar_t只是unsigned short的typedef吗?

例如,确实:

wchar_t x; 

翻译成:

 unsigned short x; 

简而言之:在C中可能是C ++没有。

广泛。 C将wchar_t定义为typedef,但在Unix中它通常是4个字节(通常不短),而在Windows 2中它可能很短。

在C ++下,它是唯一的内置类型,如charint ,因此您可以合法地重载void foo(short x)void foo(wchar_t x)

对于可能遇到此答案的任何其他人,因为Visual Studio项目中的函数调用将不会链接,尽管双方都采用wchar_t (或类似的类型,例如LPCTSTR与UNICODE #defined),并且当您DUMPBIN库的导出时函数采用const unsigned short * ,请注意VS允许您将wchar_t作为内置类型关闭。 如果有人在库中更改了此项,并且您没有在项目中点击相同的编译器开关,则它将不会链接。

此选项可在“项目属性> C / C ++ /语言/处理WChar_t作为内置类型”下更改,也可以通过“/ Zc”选项进行更改。

对于C, wchar_t是一个typedef 。 它是否是unsigned int的同义词,是否完全是无符号类型,还是4字节,是实现定义的。

在C ++中, wchar_t是一种独特的内置类型。 在这里,它的大小和签名也是实现定义的。

标准不要求wchar_t是无符号的。 它也可以签名。 并且必须有另一种相同大小的类型; 但标准没有明确说明其他类型必须简短。

“与其他整数类型之一相同的大小,符号和对齐要求,称为其基础类型”(C ++98§3.9.1)。

在C编译器中,这是一个typedef,通常在stddef.h中定义

不,它没有。 它转化为“广泛的角色”。 对特定平台上发生的事情做出任何假设是不正确的,并且首先打败了拥有wchar_t的整个目的

使用抽象的关键是将类型的语义含义与其底层表示分开。

不必要; 它可以是4字节的数量,或实际上由实现选择的任何其他大小。

这取决于编译器。