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

时间:2010-01-08 11:08:01

标签: 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()) ?
}
  1. 指向引用的指针和指向实际变量的指针可以视为相同吗?
  2. 标准是否对可变的地址使用的参考地址有任何说明。

3 个答案:

答案 0 :(得分:9)

标准8.3.2 / 4的第一句话:

  

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

(我的重点)

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

答案 1 :(得分:2)

是的,无法获取参考地址。你总是得到被引物体的地址。

答案 2 :(得分:2)

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