C 11空列表初始化工会 – 是否保证初始化工会的全长?
在C 11中,我有以下联盟:
union SomeData { std::uint8_t Byte; std::uint16_t Word; std::uint32_t DWord; unsigned char String[128]; }; 如果我初始化联盟, SomeData data {}; 是否保证工会的全部内容将“零”出来?换个方法是一个空的列表初始化程序,一个工会功能上等同于将工会装入零的工作: memset(&data,sizeof(data)); 特别是我关心字符串数据.我想确保字符串的整个长度都包含零.它似乎在我目前的编译器中工作,但规范的语言是否保证这一直是真的? 如果没有,是否有更好的方法将工会的全部初始化为零? 解决方法
不,不能保证整个联盟将被清除.只有第一个声明的工会成员,加上任何填充,保证被归零(下面的证明).
所以为了确保联合对象的整个内存区域被归零,你有以下选项: >订购成员,使最大的成员是第一个,因此一个被清除. 报价C 11: 8.5.4 [dcl.init.list] / 3
8.5 [dcl.init] / 7
8.5 [dcl.init] / 5:
从这些引号可以看出,使用{}初始化数据将导致对象进行值初始化(因为SomeData是一个默认构造函数的类类型). 值初始化没有用户提供的默认构造函数(SomeData是)的联合体意味着零初始化它. 最后,零初始化联合是指零初始化其第一个非静态命名数据成员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net中连接Oracle 的两种方式:OracleClient,Ole
- PostgreSQL中的内存管理
- ruby-on-rails – 如何使用Draper 0.14.0访问装饰
- Warning: No grammar constraints (DTD or XML s
- 【安利】“Swift你的IOS”课程君第二弹,快到碗里
- ajax – jQuery .always()似乎在$.get()请求实际
- 与C#相比,VB.NET是弱类型的吗?
- [記錄]restful格式ajax訪問模擬PUT、DELETE請求
- 高效能人士的七个习惯-1 卓越不是单一的举动,而
- c# – WinForms禁用双击并接受所有鼠标点击?