想象一下以下场景:
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现在返回一个指向引用地址或引用后面的实际对象的指针?
答案 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()的返回值也是对原始对象的引用。将指针指向引用始终返回您引用的对象的地址。