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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)