首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

两结构体对象不重载运算符怎么进行异或

2012-10-16 
两结构体对象不重载运算符如何进行异或两结构体对象,为了方便比较内容是否相同,但又不想再重载运算符,如何

两结构体对象不重载运算符如何进行异或
两结构体对象,为了方便比较内容是否相同,但又不想再重载运算符,如何直接用异或进行比较?

[解决办法]
没办法。
[解决办法]
如何直接用异或进行比较?
对象应该不适合异或进行操作吧?
查看对象的数据是否相同,应该只能用等值操作进行判断。
[解决办法]
暴力破解。
就是比较两个结构体对象中每一块内存的值是否相同就可以了。
这样就不需要知道结构体中的元素类型以及是否能够访问等问题了。

C/C++ code
#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是一个不靠谱的方法。

探讨
引用:

还有,这个方法不是所有编译器都能玩吧?


所有的语句都符合C++标准,没有什么是未定义的操作,
编译器处理的结果都是一样的。
只有在未定义操作的情况下,运行结果才随编译器有关。

热点排行