繁体   English   中英

wchar_t只是unsigned short的typedef吗?

[英]Is wchar_t just a typedef of unsigned short?

例如,做:

wchar_t x;

翻译成:

unsigned short x;

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

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

在C ++下它是唯一的内置类型,如charint ,因此你可以合法地重载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字节的数量,或实际上由实现选择的任何其他大小。

这取决于编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM