Может Указатель на ссылку и Указатель на фактическую переменную рассматриваться как то же?

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

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. Делает стандарт, говорит что-либо относительно адреса ссылки, чтобы быть взаимозаменяемое используемый для адреса переменной.
5
задан aJ. 8 January 2010 в 11:08
поделиться

3 ответа

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

.
2
ответ дан 18 December 2019 в 14:46
поделиться

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

Ссылок на ссылки, никаких массивов ссылок, и никаких указателей на ссылки

(Мой акцент)

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

.
9
ответ дан 18 December 2019 в 14:46
поделиться

Да, это эквивалентно. При взятии адреса ссылки возвращается адрес исходной вещи. Так как из ссылки невозможно получить другой адрес, для указателя на ссылку нет отдельного типа.

.
2
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: