В этом примере:
#include <iostream>
#include <cstring>
struct A
{
int a;
bool b;
};
bool foo( const A a1, const A a2 )
{
return ( 0 == std::memcmp( &a1, &a2, sizeof( A ) ) );
}
int main()
{
A a1 = A();
a1.a = 5;a1.b = true;
A a2 = A();
a2.a = 5;a2.b = true;
std::cout<<std::boolalpha << foo( a1, a2 ) << std::endl;
}
будет производить false
из-за заполнения.
У меня нет доступа к функции foo
, и я не могу изменить способ сравнения.
Предполагая, что a bool
занимает 1 байт (это верно в моей системе), если я изменил struct A
на это:
struct A
{
int a;
bool b;
char dummy[3];
};
тогда он отлично работает в моей системе (выход true
).
Есть ли что-нибудь еще, что я мог бы сделать, чтобы исправить эту проблему (получить вывод true
)?