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

posted @ 2023-07-11 15:19  CodeMagicianT  阅读(559)  评论(0编辑  收藏  举报