memcmp为相同(零值)位域结构返回非零值

use*_*270 0 c c++

当比较值中包含0的两个位域结构时,我看到memcmp的意外输出.memcmp在输出中返回非零结果.

是否意味着比特位域不会引用可以保留任何东西?如果是这样(导致memcmp不可靠)比较包含位字段的任何内容的最佳方法是什么?我可以拥有自己的类或类型字段结构.

struct bitStruct{
    int b:4;
};
int test() 
{
    bitStruct s = {0};
    bitStruct zero = {0};
    cout << memcmp(&s, &zero, sizeof(s)); // this memcmp returns non-zero.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

use*_*738 5

可能涉及填充.memcmp只会比较sizeof(s)字节,就是这样.如果涉及填充,结果将不会像您期望的那样,因为结构的未命名成员将处于不确定的阶段.比较不会产生相同的结果.您可以使用sizeof(结构类型)memset结构实例,这将在此方案中产生正确的结果.

在这种情况下,您可以完美地完成的事情是比较该位域而不是整个结构实例.