20

例如,是否:

wchar_t x;

翻译成:

unsigned short x;
4

6 回答 6

22

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

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

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

于 2010-03-07T07:34:03.880 回答
17

对于可能遇到此答案的其他任何人,因为您的 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”选项更改。

于 2010-09-08T01:27:13.407 回答
12

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

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

于 2010-03-07T08:39:07.290 回答
1

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

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

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

于 2010-03-07T07:39:20.917 回答
1

不,它没有。它翻译为“宽字符”。对特定平台上发生的事情做出任何假设都是不正确的,并且首先违背了拥有 wchar_t的全部目的。

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

于 2010-03-07T07:59:44.267 回答
0

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

这取决于编译器。

于 2010-03-07T07:32:14.810 回答