注意:“无符号”说明符会更改Visual Studio中wchar_t类型的大小

问题描述

在Visual Studio中,将unsigned说明符添加到wchar_t类型中会将类型大小从2个字节更改为4个字节。

通过在Visual Studio 2008或最新的Visual Studio 2019中运行以下两行代码:

    cout << "wchar_t: " << sizeof(wchar_t) << endl;
    cout << "unsigned wchar_t: " << sizeof(unsigned wchar_t) << endl;

您得到2的{​​{1}}和wchar_t的{​​{1}}以及警告C4076('unsigned':不能与'wchar_t'类型一起使用)。

预期的行为是保留2个字节的大小。 documentation says不会改变大小,只是告诉您使用编译器选项使whcar_t成为无符号short的typedef:

特定于Microsoft的:默认情况下,wchar_t是本机类型,但是您可以使用/ Zc:wchar_t-将wchar_t设置为无符号short的typedef。 __wchar_t类型是本机wchar_t类型的Microsoft专有同义词。

这可能是启用“将警告作为错误”编译器选项并遵循零警告规则的另一个原因。

至少对于新项目。不幸的是,在处理遗留代码时,遵循此规则可能从困难到不可能。

解决方法

我认为Visual Studio在这里是正确的,unsigned wchar_t(或signed wchar_t)没有provision in the standard,所以编译器将如何处理它。虽然错误会很好(由GCC和Clang提出),但警告也可以。

大概这4个字节是因为Visual Studio必须决定丢弃unsignedwchar_t中的一个,并决定丢弃wchar_t,而给您留下unsigned int

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...