返回值int&

时间:2015-07-12 06:34:28

标签: c++

我有这样的代码。

#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的值?

5 个答案:

答案 0 :(得分:2)

sha1($token)

因为您的int &f = abc(); 不是引用。它只是一个赋值为f的变量。您应该将其写为上面的内容。

答案 1 :(得分:1)

这是因为abc()虽然通过引用返回int,但f并没有&#34;抓住&#34;此引用,而是获取返回的引用指向的值。如果您希望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;
}

答案 2 :(得分:0)

int f = abc();
^^^ // This type is 'int' not 'int&'

f的{​​{1}}类型为int,与int&不同,导致创建副本。因此,f不是c的引用,而是cabc返回时,它被初始化为 forTopUpPin = [[UITextField alloc] initWithFrame:CGRectMake(50.90, itemTop, self.view.frame.size.width - 92, 20)]; forTopUpPin.tag = 1; forTopUpPin.placeholder = @"Enter Topup PIN"; forTopUpPin.borderStyle = UITextBorderStyleNone; forTopUpPin.font = [UIFont fontWithName:@"Arial" size:15]; forTopUpPin.backgroundColor = [UIColor whiteColor]; 中存储的相同值。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在以下代码中:int f = abc() f c 值的副本,这两个值是不同的。当您执行 ++ f 时,您正在增加 f 的副本,这对 c 没有影响。当您执行以下操作时:int &f = abc()您正在创建一个参考变量 f ,该变量绑定到 c 的值,因此 f 是变量 c 的别名,对 f 所做的任何更改均为 c