两结构体对象不重载运算符如何进行异或
两结构体对象,为了方便比较内容是否相同,但又不想再重载运算符,如何直接用异或进行比较?
[解决办法]
没办法。
[解决办法]
如何直接用异或进行比较?
对象应该不适合异或进行操作吧?
查看对象的数据是否相同,应该只能用等值操作进行判断。
[解决办法]
暴力破解。
就是比较两个结构体对象中每一块内存的值是否相同就可以了。
这样就不需要知道结构体中的元素类型以及是否能够访问等问题了。
#include <iostream>using namespace std;struct A{public: A( int a, int b):_a(a),_b(b){};private: int _a; double _b;};bool cmp(const A &num1,const A &num2){ const char *num1_tail = (char*)(&num1+1); const char *num2_tail = (char*)(&num2+1); const char *p1=(char*)&num1; const char *p2=(char*)&num2; while( num1_tail-p1) { if( *p1++ != *p2++ ) return false; } return true;}int _tmain(int argc, _TCHAR* argv[]){ A o1(1,2); A o2(1,2); A o3(1,3); cout <<"o1,o2 equal? "<<boolalpha << cmp(o1,o2)<<endl; cout <<"o1,o3 equal? "<<boolalpha << cmp(o1,o3)<<endl; return 0;}
[解决办法]
C/C++标准均没有对诸如对齐所需的填充字节(当然,还有更多其它类似的东西)做任何规定。所以,用memcmp是一个不靠谱的方法。