代码之家  ›  专栏  ›  技术社区  ›  aJ.

指向引用的指针和指向实际变量的指针是否可以被视为相同的?

  •  5
  • aJ.  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  9
  •   Andreas Brinck    15 年前

    标准8.3.2/4第一句:

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

    (我强调)

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

        2
  •  2
  •   DevSolar    15 年前

    是的,不可能取得推荐人的地址。你总是得到被引用对象的地址。

        3
  •  2
  •   DevSolar    15 年前

    是的,它是等价的。 获取引用的地址将返回原始对象的地址。 因为没有办法从推荐信中找到其他地址, 指向引用的指针没有单独的类型。