相关疑难解决方法(0)

将布尔设置为0安全吗?

假设我有一些遗留代码,除非发现错误,否则无法更改,并且它包含以下代码:

bool data[32];
memset(data, 0, sizeof(data));
Run Code Online (Sandbox Code Playgroud)

这是bool将数组中的所有false值设置为值的安全方法吗?

更一般地,是安全的memsetbool0,以使其价值false

是否保证可以在所有编译器上运行?或者我是否要求修复?

c++ memset language-lawyer

32
推荐指数
4
解决办法
4275
查看次数

C++ 11空列表联合的初始化 - 是否保证初始化联合的全长?

在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)

特别是,我关心字符串数据.我想确保字符串的整个长度包含零.它似乎在我当前的编译器中工作,但规范的语言是否保证这始终是真的?

如果不是:有没有更好的方法将联合的全长初始化为零?

c++ unions c++11 list-initialization

10
推荐指数
2
解决办法
736
查看次数