這個例子的目的:如何比較POD類型
#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
函數,我無法改變比較的方式。
假設bool
佔用1個字節(這是我的系統上如此),如果我改變了struct A
這樣:
struct A
{
int a;
bool b;
char dummy[3];
};
然後正常工作在我的系統(輸出true
)。
有什麼我可以做的,以解決上述問題(獲得true
輸出)?
爲什麼你傳遞'const'值而不是'const'? ==>'foo(const A a1,const A a2);' – iammilind
@iammilind'foo'函數來自第三方庫,我無權更改它的簽名 –
您是否嘗試過打包結構似乎可以控制它?這樣你可能不需要使用memset「trick」。 VS:'#pragma pack(1)'就在結構之前。 G ++相同。 http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html – RedX