C++ 指向引用的指针和指向实际变量的指针可以被视为相同的吗?

C++ 指向引用的指针和指向实际变量的指针可以被视为相同的吗?,c++,reference,C++,Reference,我最近在我的代码库中看到了下面的代码(下面给出了简化版本),我对此表示怀疑: 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; } p

我最近在我的代码库中看到了下面的代码(下面给出了简化版本),我对此表示怀疑:

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()) ?
}
  • 指向引用的指针和指向实际变量的指针可以被视为相同吗
  • 该标准是否规定了引用地址上的任何内容,以便用于变量地址的互换性
    是的,不可能记下推荐人的地址。您始终可以获得引用对象的地址。

    是,它是等效的。 获取引用的地址将返回原始对象的地址。 由于无法从引用中获取任何其他地址,
    指向引用的指针没有单独的类型。

    标准8.3.2/4的第一句:

    不得提及 引用,没有引用数组, 并且没有指向引用的指针

    (我的重点)


    这并不意味着您不能将声明为引用的变量的地址作为引用,它只是意味着指向引用的指针没有单独的类型。

    我很高兴您澄清了这一点。;-)六羟甲基三聚氰胺六甲醚。。。我仍然对标准版的那一行感到困惑。我把《标准》中的这句话解释为——我们不应该试图引用指针。表示不能使用引用的地址。@aJ不,它只是表示不能声明类型
    B&*
    的类型。它表示不能获取引用的地址。您可以使用引用获取其引用的地址,但不能获取引用本身的地址。引用不是对象,也没有地址。应该提到的是,您可以使用类似
    B*&
    (指针引用)的类型,反之亦然。