传输一个值,在C ++中通过引用返回

时间:2015-10-29 11:23:03

标签: c++

我有一个接收两个整数引用的函数。布尔指示符允许选择第一个引用的一次和第二个引用的一次,如下面的代码所示:

1)我不明白alterne(n,p)= 0和alterne(n,p)= 12的含义

2)和静态bool指示的功能;

#include <iostream>
using namespace std;

int & alterne (int &, int &);

int main()
{
    int n=1, p=3, q=5;

    alterne(n,p) = 0;
    cout << "n=" << n << "p=" << p << "\n" ;

    alterne(p,q) = 12;
    cout << "p=" << p << "q=" << q << "\n" ;
}

int & alterne (int & n1, int & n2)
{
    static bool indic = true;
    if (indic) { indic =false; return n1; }
    else       { indic = true; return n2 ; }
}

感谢您的考虑

3 个答案:

答案 0 :(得分:1)

以下内容对您有意义吗?这是一个函数,它通过引用获取int并为其分配一个新值。

void foo(int& x)
{
    x = 33;
}
  

1)我不理解alterne(n,p) = 0alterne(n,p) = 12

的含义

对于您的问题,alterne会返回int&。因此,您基本上具有与上述相同的情况(即,对int的引用可用,并最终为引用的int分配新值。

alterne(n, p) = 0;
// first call is equivalent to getting an `int&` to `n`
// then performing n = 0;

alterne(p, q) = 12;
// second call is equivalent to getting an `int&` to `q`
// then performing q = 12;
  

2)和static bool indic;

的功能

这是alterne函数的本地变量,但其生命周期使得在函数的所有调用中都可以使用相同的bool。它被初始化一次并在每次函数调用期间读取。因此,它在第一个函数调用时初始化为true一次,并在每个后续函数调用中在falsetrue之间切换。

答案 1 :(得分:1)

int & alterne (int & n1, int & n2)
{
    static bool indic = true;
    if (indic) { indic =false; return n1; }
    else       { indic = true; return n2 ; }
}

让我们分解一下这个功能:

static bool indic = true;

首先,函数体内部有一个静态变量。这里的静态意味着变量的生命周期是全局的,这意味着它在函数调用之间保留其值。第一次致电alterne()ture

    if (indic) { indic =false; return n1; }
    else       { indic = true; return n2 ; }

这基本上切换了变量indic。如果它确实是错误的。由于indic在函数调用之间保留其值,因此函数alterne()基本上在返回n1n2之间交替 - 从n1开始。

int & alterne (int & n1, int & n2)

该函数对int进行2次引用,并返回对int的引用。正如我们在上面看到的那样,它实际上会将引用返回到n1然后再返回n2,依此类推。

 alterne(n,p) = 0

alterne(n,p)返回n或p(基于indic变量的当前值,然后将0分配给它。由于这是第一次调用alterne,它与执行{{1}相同}}

n = 0;

由于这是对alterne(p,q) = 12; 的第二次调用,因此与alterne()

相同

希望这无论如何都会帮助你。

答案 2 :(得分:0)

alterne函数是一个开关,它首先通过引用调用返回第一个参数然后在第二次通过引用返回第二个参数。

调用alterne函数后编译器将用返回引用替换assign运算符的左侧。然后,assign操作员的右侧将复制到其中。