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