返回值 int&

Return value int&

本文关键字:int 返回值      更新时间:2023-10-16

我有这样的代码。

#include <iostream>
using namespace std;
int c=0;
int& abc()
{
    c++;
    return c;
}
int main()
{
    cout << c << endl;
    int f = abc();
    cout << c << " " << f << endl;
    f++;
    cout << c << " " << f << endl;
}

我得到的输出是

0
1 1
1 2

现在函数abc返回一个整数引用。因此,语句int f=abc();应该将整数f和c指向同一地址。但是为什么f++语句不影响c的值呢?

int &f = abc();

因为您的f不是参考。它只是一个被赋值为c的变量。你应该像上面一样写它。

这是因为当abc()通过引用返回int时,f并没有"抓取"这个引用,而是抓取返回的引用指向的值。如果你想让f抓取引用,你需要将其定义为引用类型。

这样做:

#include <iostream>
using namespace std;
int c=0;
int& abc()
{
    c++;
    return c;
}
int main()
{
    cout << c << endl;
    int &f = abc();
    cout << c << " " << f << endl;
    f++;
    cout << c << " " << f << endl;
}
int f = abc();
^^^ // This type is 'int' not 'int&'

您为f键入的是int,这与int&不同,并导致创建副本。因此,f不是对c的引用,而是一个单独且不同的值,当它从abc返回时,它被初始化为与存储在c中的值相同的值。

Yes abc()返回一个引用。但f只是一个整数变量。因此,int f=abc()所做的是将c的值分配给f。当您调用f++时,它只更改f变量的值。它不会改变c的值。因为CCD_ 21不是指针。

在以下代码中:int f = abc()fc值的副本,这两个值是不同的。当您执行++f时,您正在递增副本f没有影响。当您执行以下操作时:int &f = abc()您正在创建一个引用变量f,该变量绑定到c的值,因此,由于f是变量c进行。