我不确定我是否理解了堆栈的正确性。我有以下运营商 复数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的内存区域 a.y为64位,因为a.x / a.y的类型为int。并且返回值a 在运算符+ = stack-frame中指向" a" -memory区域。
我想知道" a" -memory-area是怎样的? 类型复合体存储在主堆栈框架中吗?
它是否像一个数组,并且引用指向" a [0]“或者是a.x和 a.y separeted,你需要"两个"引用指针指向 复杂的对象。
答案 0 :(得分:1)
a
是对用于调用operator +=
的变量的引用。
complex w, p;
void f() {
w.x = w.y = 0;
p.x = 1;
p.y = 0;
w += p;
}
a
上的参数operator +=
是w
的别名,参数b
是p
的别名。
答案 1 :(得分:1)
复杂对象的内存映射看起来像内存地址的集合,它将依赖于实现。数组定义仅保证保持连续的内存位置。无需在连续的内存位置分配复杂对象的内存布局。
运算符重载函数的返回地址应该是根据您的实现的第一个对象复杂对象的地址。