#include <iostream>
using namespace std;
class Dummy {
public:
bool isitme (Dummy& param);
};
bool Dummy::isitme (Dummy& param)
{
if (¶m == 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 (¶m == this)
不应该:
if (param == this)
as&#39; this&#39;是一个指针,&#39; param&#39;也是指针,所以如果我们说:
if (¶m == this)
这将是指针(&amp; param)的地址和指针(this)之间的比较,这不是我们正在寻找的;检查传递给成员函数的参数是否是对象本身?
答案 0 :(得分:0)
引用类型与指针类型的语义不同。它没有具体说明编译器如何实现引用。 引用类型没有每个地址的地址。当您获取引用类型的地址时,结果将始终是它所绑定的对象的地址。
所以下面的代码测试原始对象的地址param
绑定到this
;
bool Dummy::isitme (Dummy& param)
{
if (¶m == this) return true;
else return false;
}
对于指针,只需测试指针是否相等。
bool Dummy::isitme (Dummy* param)
{
if (param == this) return true;
else return false;
}