例如,确实:
wchar_t x;
翻译为:
unsigned short x;
答案 0 :(得分:20)
简而言之:在C中可能是C ++ no。
广泛。 C将wchar_t定义为typedef,但在Unix中它通常是4个字节(通常不短),而在Windows 2中它可能很短。
在C ++下,它是唯一的内置类型,例如char
或int
,因此您可以合法地重载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_t
是typedef
。它是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字节的数量,或实际上由实现选择的任何其他大小。
这取决于编译器。