C++ 将指针与引用进行比较

C++ 将指针与引用进行比较,c++,pointers,reference,C++,Pointers,Reference,我正在重构一个遗留代码。我必须比较指针和引用是否相等(以检查两个对象是否相等)。在这种情况下,它通过比较地址来实现。如果我对指针和引用执行如下操作,是否会出现任何问题(任何例外情况?)。到目前为止,在我的测试中,它工作正常。请指教 #include <stdio.h> #include <iostream> class MemberData { //Huge class with many data members }; int main() { Me

我正在重构一个遗留代码。我必须比较指针和引用是否相等(以检查两个对象是否相等)。在这种情况下,它通过比较地址来实现。如果我对指针和引用执行如下操作,是否会出现任何问题(任何例外情况?)。到目前为止,在我的测试中,它工作正常。请指教

#include <stdio.h>
#include <iostream>

class MemberData
{
    //Huge class with many data members
};

int main()
{
    MemberData  x ;
    const MemberData& y = x;
    MemberData *ptr= &x;


    if(std::addressof(*ptr)==std::addressof(y))
    {
            std::cout << "Both are equal" << "\n";  
    }

    return 0;
}
#包括
#包括
类成员数据
{
//包含许多数据成员的大型类
};
int main()
{
成员数据x;
常量成员数据&y=x;
MemberData*ptr=&x;
如果(std::addressof(*ptr)=std::addressof(y))
{
std::cout
std::addressof(*ptr)
似乎是多余的。如果您有一个指向该对象的指针,并且您需要一个指向该对象的指针,那么为什么要通过该指针间接获取指向该对象的指针?
ptr==std::addressof(y)
应该也可以。只要您想比较地址的相等性

(检查两个对象是否相等)

比较地址的相等性就是比较标识,即它们是否是相同的对象。要比较对象的相等性,通常需要比较它们的值。例如,以下变量不是相同的对象,因此没有相同的地址,但它们的值相等(假定为sane copy构造函数):


您提供的代码将始终打印“两者相等”因为你所做的是检查x的地址和x的别名的地址,这当然是相同的。真正的问题是你只想检查地址的相等性而不是它们的内部成员,即两个地址不同但具有相同值的同一类的对象。

当你说检查两个对象是否相等时你的意思是检查它们是否相等,还是检查它们是否完全相同object@Tas检查完全相同的对象。请检查我的注释以了解更多信息。我解释了全局。一个向量容器有一个成员列表,我比较的成员是来自向量容器的函数中的const&memberdata.因为它一直都是常量和参考值,所以不需要比较它们的价值,而且因为它庞大而昂贵。所以身份比较就足够了。
MemberData x;
MemberData y = x;