检查传递给成员函数的参数是否为对象本身

时间:2017-03-18 12:25:05

标签: c++ class this

#include <iostream>
using namespace std;

class Dummy {
  public:
    bool isitme (Dummy& param);
};

bool Dummy::isitme (Dummy& param)
{
  if (&param == this) return true;
  else return false;
}

int main () {
  Dummy a;
  Dummy* b = &a;
  if ( b->isitme(a) )
    cout << "yes, &a is b\n";
  return 0;
}

关于上面的代码,在&#39; isitme&#39;功能,if条件:

if (&param == this)

不应该:

if (param == this)

as&#39; this&#39;是一个指针,&#39; param&#39;也是指针,所以如果我们说:

if (&param == this)

这将是指针(&amp; param)的地址和指针(this)之间的比较,这不是我们正在寻找的;检查传递给成员函数的参数是否是对象本身?

1 个答案:

答案 0 :(得分:0)

引用类型与指针类型的语义不同。它没有具体说明编译器如何实现引用。 引用类型没有每个地址的地址。当您获取引用类型的地址时,结果将始终是它所绑定的对象的地址。

所以下面的代码测试原始对象的地址param绑定到this;

bool Dummy::isitme (Dummy& param)
{
  if (&param == this) return true;
  else return false;
}

对于指针,只需测试指针是否相等。

bool Dummy::isitme (Dummy* param)
{
  if (param == this) return true;
  else return false;
}