通过引用传递和内存使用

时间:2014-04-23 19:29:30

标签: c++ function reference

在C ++中通过引用传递参数时,它如何处理基于其中一个引用定义的变量。例如,我创建了一个函数MyFunc1,然后创建了一个试图实现相同功能的备用函数MyFunc2。在第二个中,有y根据x定义。根据使用的内存量,y是否也被视为参考?

int MyFunc1(const int &x, const int &a, const int &times_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 &times_minus_one=1) {
    int y = x;
    if (times_minus_one == 1) {
        y = y * -1;
    }
    return y * a;
}

2 个答案:

答案 0 :(得分:2)

顺便提一下,你在MyFunc2中定义了y,y是原始变量的副本。这里复制正在堆栈上实例化,并将占用堆栈上的sizeof(y)内存。

例如,如果您将y定义为const auto& y = x;,那么y将是一个引用,它只是指针的大小。

答案 1 :(得分:2)

代码中的y只是一个整数,您可以为其指定x的值。它可能会也可能不会使用任何内存 - 标准没有指定。至于引用的内存占用情况 - 它们的行为通常与指针相同。