84.结构体变量比较是否相等
84.结构体变量比较是否相等
1.重载了 “==” 操作符
#include <iostream>
using namespace std;
struct foo
{
int a;
int b;
foo(int a, int b)
{
this->a = a;
this->b = b;
}
// 友元运算符重载函数
friend bool operator==(const foo& ob1, const foo& ob2);
// 成员运算符重载函数
bool operator==(const foo& obj);
};
bool operator==(const foo& ob1, const foo& ob2)
{
return (ob1.a == ob2.a && ob1.b == ob2.b);
}
bool foo::operator==(const foo& obj)
{
return (a == obj.a && b == obj.b);
}
int main()
{
struct foo s1(1, 2), s2(1, 2);
//s1.a = 1;
//s1.b = 2;
//s2.a = 1;
//s2.b = 2;
if (s1 == s2)
cout << "两个结构体相等" << endl;
else
cout << "两个结构体不相等" << endl;
return 0;
}
2.元素的话,一个个比;
3.指针直接比较,如果保存的是同一个实例地址,则(p1==p2)为真;
不能用函数memcmp来判断两个结构体是否相等:memcmp函数是逐个字节进行比较的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法比较。
当我们使用memcmp比较两个结构体时,又不能保证对每个结构体都使用了memset进行清零操作,此时就会出现错误的结果。为了安全起见,在c语言中,可以自己写结构体比较函数;在c++中,结构体基本等同于类,重载==操作符,自己实现比较逻辑即可。当然,对于全局的结构体,以及静态变量,编译器会将结构体占用的内存初始化为0,等同于memset。
————————————————
版权声明:本文为CSDN博主「森明帮大于黑虎帮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44918090/article/details/123351346