通行证参考和内存使用情况

Pass by Reference and Memory Usage

本文关键字:用情 情况 内存 参考 通行证      更新时间:2023-10-16

在C++中通过引用传递参数时,它如何处理基于其中一个引用定义的变量。例如,我创建了一个函数MyFunc1,然后创建了另一个尝试实现相同功能的函数MyFunc2。在第二种情况下,存在一个根据x定义的y。就使用的内存量而言,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;
}

根据您在MyFunc2中定义y的方式,y是原始变量的副本。在这里,副本在堆栈上被实例化,并将占用堆栈上的sizeof(y)内存。

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

代码中的y只是一个整数,您可以将x的值赋给它。它可能使用也可能不使用任何内存——标准没有具体说明。至于引用的内存占用,通常它们的行为与指针相同。

相关文章: