Гарантирован ли адрес, стоящий за этим, идентичным переменной с объектом - PullRequest
4 голосов
/ 31 марта 2020

В случае следующего кода:

#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 типов указателей.

1 Ответ

8 голосов
/ 31 марта 2020

Да, ваше заявление if гарантированно будет true. this в getSelf() является указателем на экземпляр.

И &s в main также является указателем на этот экземпляр.

Приведения типов не нужны, как вы подозреваете. .

...