wchar_t只是unsigned short的typedef吗?

时间:2010-03-07 07:30:32

标签: c++ c unsigned short wchar-t

例如,确实:

wchar_t x;

翻译为:

unsigned short x;

6 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:15)

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

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

答案 2 :(得分:11)

对于C,wchar_ttypedef。它是unsigned int的同义词,它是否是无符号类型,或者它是否是4个字节,是实现定义的。

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

答案 3 :(得分:1)

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

  

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

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

答案 4 :(得分:1)

不,它没有。它转化为“广泛的角色”。对特定平台上恰好是的内容做出任何假设是不正确的,并且首先违背了整个目的拥有wchar_t。

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

答案 5 :(得分:0)

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

这取决于编译器。