这背后的地址是否保证与对象的变量相同
Is the adress behind this guaruanteed to be identical to a variable with the object
如果是下面的代码:
#include<iostream>
class Sample
{
public:
Sample* getSelf()
{
return this;
}
};
int main()
{
Sample s;
if(reinterpret_cast<void*>(&s) == reinterpret_cast<void*>(s.getSelf()))
std::cout << "Same address" << std::endl;
return 0;
}
if语句中的条件是否保证为真?
我已经转换为 void*
以确保比较原始地址,以防比较特定指针类型时出现一些怪癖。
是的,您的 if
语句保证是 true
。 getSelf()
中的 this
是指向实例的指针。
并且 main
中的 &s
也是指向该实例的指针。
正如您所怀疑的那样,强制转换是不必要的。
如果是下面的代码:
#include<iostream>
class Sample
{
public:
Sample* getSelf()
{
return this;
}
};
int main()
{
Sample s;
if(reinterpret_cast<void*>(&s) == reinterpret_cast<void*>(s.getSelf()))
std::cout << "Same address" << std::endl;
return 0;
}
if语句中的条件是否保证为真?
我已经转换为 void*
以确保比较原始地址,以防比较特定指针类型时出现一些怪癖。
是的,您的 if
语句保证是 true
。 getSelf()
中的 this
是指向实例的指针。
并且 main
中的 &s
也是指向该实例的指针。
正如您所怀疑的那样,强制转换是不必要的。