在C ++中通过引用传递参数时,它如何处理基于其中一个引用定义的变量。例如,我创建了一个函数MyFunc1
,然后创建了一个试图实现相同功能的备用函数MyFunc2
。在第二个中,有y
根据x
定义。根据使用的内存量,y
是否也被视为参考?
int MyFunc1(const int &x, const int &a, const int ×_minus_one=1) {
if (times_minus_one == 1) {
return -x * a;
} else {
return x * a;
}
}
和
int MyFunc2(const int &x, const int &a, const int ×_minus_one=1) {
int y = x;
if (times_minus_one == 1) {
y = y * -1;
}
return y * a;
}
答案 0 :(得分:2)
顺便提一下,你在MyFunc2中定义了y,y是原始变量的副本。这里复制正在堆栈上实例化,并将占用堆栈上的sizeof(y)内存。
例如,如果您将y定义为const auto& y = x;
,那么y将是一个引用,它只是指针的大小。
答案 1 :(得分:2)
代码中的y
只是一个整数,您可以为其指定x
的值。它可能会也可能不会使用任何内存 - 标准没有指定。至于引用的内存占用情况 - 它们的行为通常与指针相同。