假设我有一些遗留代码,除非发现错误,否则无法更改,并且它包含以下代码:
bool data[32];
memset(data, 0, sizeof(data));
Run Code Online (Sandbox Code Playgroud)
这是bool将数组中的所有false值设置为值的安全方法吗?
更一般地,是安全的memset一bool对0,以使其价值false?
是否保证可以在所有编译器上运行?或者我是否要求修复?
在C++ 11中,我有以下联合:
union SomeData
{
std::uint8_t Byte;
std::uint16_t Word;
std::uint32_t DWord;
unsigned char String[128];
};
Run Code Online (Sandbox Code Playgroud)
如果我这样初始化联盟;
SomeData data {};
Run Code Online (Sandbox Code Playgroud)
是否保证联盟的全部内容都将"归零"?换一种方式; 是一个联合的空列表初始化程序,在功能上等同于将联合设置为零?:
memset(&data, 0, sizeof(data));
Run Code Online (Sandbox Code Playgroud)
特别是,我关心字符串数据.我想确保字符串的整个长度包含零.它似乎在我当前的编译器中工作,但规范的语言是否保证这始终是真的?
如果不是:有没有更好的方法将联合的全长初始化为零?