例如,是否:
wchar_t x;
翻译成:
unsigned short x;
简而言之:在 C 中可能在 C++ 中没有。
广泛。C 将 wchar_t 定义为 typedef,但在 Unix 中它通常是 4 个字节(所以通常不短),而在 Windows 2 中它可能很短。
在 C++ 下,它是唯一的内置类型,例如char
or int
,因此您可以合法地重载void foo(short x)
和void foo(wchar_t x)
对于可能遇到此答案的其他任何人,因为您的 Visual Studio 项目中的函数调用不会链接,尽管双方都采用wchar_t
(或类似的类型,例如LPCTSTR
使用 UNICODE #defined),并且当您 DUMPBIN 库的导出时,函数采用,请注意,VS 允许您作为内置类型const unsigned short *
关闭。wchar_t
如果有人在库中更改了它,并且您没有在项目中点击相同的编译器开关,它将不会链接。
该选项可以在“Project Properties>C/C++/Language/Treat WChar_t as Builtin type”下更改,也可以通过“/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 字节的数量,或者实际上是由实现选择的任何其他大小。
这取决于编译器。