指向引用的指针是指向引用的地址还是值?

时间:2013-04-12 13:20:02

标签: c++ pointers reference

想象一下以下场景:

class ABC
{ 
  public: 
  int abc;
};

ABC& modifyABC(ABC& foo)
{
  foo.abc+=1337;
  return foo;
}

void saveABC(ABC& bar, std::vector<ABC*>& list)
{
  list.push_back(&modifyABC(bar));
}

int main()
{
  ABC foobar;
  std::vector<ABC*> ABCList;
  saveABC(foobar,ABCList);
  return 0;
}

modifyABC()返回对ABC的引用(内部某种指针也是AFAIK)。 “地址”和“ operator现在返回一个指向引用地址或引用后面的实际对象的指针?

5 个答案:

答案 0 :(得分:1)

我正在努力解决你问题的最后一句话(“指向参考地址的指针”?)

可以说modifyABC()引用ABC,并返回完全相同的引用。没有对象的副本。

代码的整体效果是foobar的地址附加到ABCList

答案 1 :(得分:1)

  

“地址”&amp; operator现在返回一个指向引用地址或引用后面的实际对象的指针?

在C ++中,引用本身没有自己的地址。因此,引用的地址表示引用所引用的对象的地址。

X x; 
X &r = x; //reference
X *p = &r; //same as &x

希望有所帮助。

答案 2 :(得分:1)

  

modifyABC()返回对ABC的引用(内部某种指针也是AFAIK

不完全

指针是需要一些存储的对象(变量),并在该存储中保存另一个对象的内存中的地址。 引用是纯别名 ,就像其他名称一样。从理论上讲,它们根本不需要任何存储空间。

根据C ++ 11标准的第8.3.2 / 4段:

  

未指明引用是否需要存储(3.7)。

因此,指向引用的指针实际上是指向引用对象的指针,对引用执行的任何操作(除了在初始化时将其绑定到对象的行为)是实际上对引用为别名的对象

答案 3 :(得分:1)

您使用引用执行的任何操作(包括获取其地址) 相当于对引用的对象进行操作。在 C ++,一个引用本身是不是一个对象,不一定 在内存中占用空间,并且没有地址。

答案 4 :(得分:0)

引用和指针是两个不同的概念。您可以将引用视为现有对象的别名。因此,就像别名的别名再次是原始的别名一样,这里的modifyABC()的返回值也是对原始对象的引用。将指针指向引用始终返回您引用的对象的地址。