为什么回答“确定”?

class CTest {
public:
    int isitme(CTest& cobj);
};
int CTest::isitme(CTest &cobj)
{
    if(&cobj == this)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{
    CTest a;
    CTest *b = &a;
    if(b->isitme(a))
    {
        cout<<"OK";
    }else
    {
        cout<<"not OK";
    }
    return 0;
}

最佳答案

因为成员函数隐式接收指向对象的指针作为参数。该指针可在函数体内用作this指针。

因此,当您这样做时:

b->isitme(a)


成员函数isitme()隐式接收指针b作为参数,并且该指针将被视为函数内部的this指针。

由于b指向a,所以this将指向a(毕竟,您正在通过指针isitme()调用对象a上的成员函数b)。

由于a是作为显式参数传递的,因此a也是引用cobj所绑定的对象。因此,采用cobj的地址可以得到a的地址。这反过来意味着该表达式:

//  Address of "a": "cobj" is bound to argument "a" in the function call
//  vvvvv
    &cobj == this
//           ^^^^
//           Address of "a": the function is called through a pointer to "a"


评估为true

10-04 16:03