将指针与引用进行比较

Rob*_*ech 5 c++ pointers reference

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 3

std::addressof(*ptr)似乎多余。如果你有一个指向该对象的指针,并且需要一个指向该对象的指针,那么为什么要间接通过该指针,然后获取指向所指向的对象的指针呢?ptr == std::addressof(y)应该同样好用。只要你想比较地址的相等性...

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

比较地址的相等性就是比较同一性,即它们是否是同一个对象。要比较对象的相等性,通常会比较它们的值。例如,以下变量不是同一个对象,因此不具有相同的地址,但它们的值相等(假设复制构造函数正常):

MemberData x;
MemberData y = x;
Run Code Online (Sandbox Code Playgroud)