c 11 – 枚举值需要多少位?
发布时间:2020-12-16 07:15:36 所属栏目:百科 来源:网络整理
导读:#include stdint.henum state : uint8_t { NONE,USA,CAN,MEX};struct X { state st : 2; // compiles with uint8_t st : 2}; Clang 3.9.0编译成功. GCC 4.8.4和5.3.0抱怨: warning: ‘X::st’ is too small to hold all values of ‘enum state’ 谁是对的
#include <stdint.h> enum state : uint8_t { NONE,USA,CAN,MEX }; struct X { state st : 2; // compiles with uint8_t st : 2 }; Clang 3.9.0编译成功. GCC 4.8.4和5.3.0抱怨: warning: ‘X::st’ is too small to hold all values of ‘enum state’ 谁是对的? 解决方法
TL; DR
两者都是正确的. 枚举的值受基础类型的限制,而不是枚举器的限制! C 14,7.2列举声明,第8段:
这意味着有可能: state x = static_cast< state >(5); 这就是GCC警告你的事情:枚举状态可能有不适合2位的值. 但是,只要您不尝试对X :: st实际执行此操作,一切都是闪亮的. 这(可能)是为什么Clang不会警告你. 由于标准不要求任何一种诊断方法,因此警告或没有警告您没有错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- swift3.0截取View生成图片 图片截取成新图片
- c# – 仅映射更改的属性?
- c – 使foo(derived_object)调用foo(Base const&
- Electron+Vue – 基础学习(2): 项目打包成exe桌面
- Dojo 1.7 Release Notes翻译完成,包含若干重大更
- 记录一下cocos2d-x发布iOS项目是遇到的问题
- 多文件上传--2 (uploadImage.swf)
- Dojo Data Store —— 统一数据访问接口 .
- ruby-on-rails – Rails:如何为redirect_to设置
- Flex一个RemoteObject调用JAVA对象里面的多个方法
热点阅读