参考指向哪里

Where does the reference points to?

本文关键字:参考      更新时间:2023-10-16

我不确定我是否正确理解了堆栈。我有以下运算符复数 A 和 B 的重载(a=3+5i 和 b=2+i)。

struct complex{
int x;
int y;
};
complex& operator+=(complex& a, const complex b){
a.x=a.x+b.x;
a.y=a.y+b.y;
return a; 
}

现在我想知道返回值的引用指向哪里。

我认为在主堆栈帧中有一个 a = a.x 的内存区域和a.y 为 64 位,因为 a.x/a.y 是 int 类型。和返回值 a在运算符中+=堆栈帧指向这个"a"内存区域。

我想知道"a"记忆区域是什么样子的,对象如何类型复合体存储在主堆栈框架中?

它像一个数组,引用指向"a[0]"还是a.x和a.y 分开,您需要"两个"引用指针来指向复杂类型的对象。

a 是对用于调用operator +=的变量的引用。

complex w, p;
void f() {
  w.x = w.y = 0;
  p.x = 1; 
  p.y = 0;
  w += p;
}

参数 a on operator +=w 的别名,参数 bp 的别名。

复杂对象的内存映射看起来像内存地址的集合,它将依赖于实现。数组定义仅保证保存连续的内存位置。复杂对象的内存布局不需要在连续内存位置分配。

运算符重载函数的返回地址应该是根据您的实现第一个对象复杂对象 a 的地址。