Можно ли указатель на ссылку и указатель на фактическую переменную считаться одинаковыми? - PullRequest
5 голосов
/ 08 января 2010

Недавно я увидел приведенный ниже код (упрощенная версия, приведенная ниже) в моей базе кода и получил это сомнение:

class B;
class A
{
  public:
     A():m_A("testA"){}
     B& getB()
     {
       return m_B;
     }
     B* getBPtr() //== > written to explain the problem clearly
     {
       return &m_B;
     }
private:
    B m_B;
};

class B
{
  public:
    B(const std::string& name):m_Name(name){}
    std::string getName() const
    {
      return m_Name;
    }
private:
    std::string m_Name;
};

class C
{
 public:
   void testFunc(B* ptr)
   {
   }
};


int main()
{
  A a;
  C c;
 c.testFunc(&a.getB()); ===> is it equivalent to c.testFunc(a.getBPtr()) ?
}
  1. Указатель на ссылку и указатель на фактическую переменную можно рассматривать как один и тот же?
  2. Стандарт говорит, что что-либо по адресу ссылки является взаимозаменяемым и используется для адреса переменной.

Ответы [ 3 ]

9 голосов
/ 08 января 2010

Первое предложение стандарта 8.3.2 / 4:

Там не должно быть никаких ссылок на ссылки, нет массивов ссылок, и нет указателей на ссылки

(Мой акцент)

Это не означает, что вы не можете взять адрес переменной, объявленной в качестве ссылки, это просто означает, что не существует отдельного типа для указателя на ссылку.

2 голосов
/ 08 января 2010

Да, это эквивалентно.Взятие адреса ссылки возвращает адрес оригинальной вещи.Поскольку нет никакого способа получить любой другой адрес из ссылки, нет отдельного типа для указателя на ссылку.

2 голосов
/ 08 января 2010

Да, невозможно взять адрес ссылки. Вы всегда получаете адрес указанного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...