首页 > 解决方案 > 这个后面的地址是否保证与对象的变量相同

问题描述

如果出现以下代码:

#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*以确保比较原始地址,以防在比较特定指针类型时出现一些怪癖。

标签: c++pointersraw-pointer

解决方案


是的,您的if陈述保证是true。insidethisgetSelf()指向实例的指针。

&sinmain也是指向该实例的指针。

正如您所怀疑的那样,演员阵容是不必要的。


推荐阅读