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

aJ.*_*aJ. 5 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;
     }
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()) ?
}
Run Code Online (Sandbox Code Playgroud)
  1. 指向引用的指针和指向实际变量的指针可以被视为相同?
  2. 标准是否对变量地址使用的参考地址有任何可互换性.

And*_*nck 9

标准8.3.2/4的第一句话:

不应引用引用,不引用引用数组,也不引用引用指针

(我的重点)

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

  • 它有点意味着你不能拿参考的地址.您可以使用引用获取其引用的地址,但不能获取引用本身的地址.引用不是对象,也没有地址. (2认同)

jk.*_*jk. 2

是的,不可能获取引用的地址。您始终可以获得所引用对象的地址。