微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决注意:“无符号”说明符会更改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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。