我有一个函数,它接收两个整数的引用。布尔指示符允许选择一次第一次引用和一次第二次引用,如以下代码所示:
1)我不明白alterne(n,p) =0和alterne(n,p) = 12的含义
2)静态布尔索引的作用;
#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 ; }
}谢谢你的考虑
发布于 2015-10-29 19:30:14
下面这些对你来说有意义吗?它是一个通过引用获取int并为其赋值的函数。
void foo(int& x)
{
x = 33;
}1)我不明白
alterne(n,p) = 0和alterne(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一次,该值在第一次函数调用时可用,并在每次后续函数调用时在false和true之间切换。
发布于 2015-10-29 19:42:00
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()基本上在返回n1和返回n2之间交替-从n1开始。
int & alterne (int & n1, int & n2)该函数接受2个对int的引用,并返回一个对int的引用。正如我们在上面看到的,它实际上只返回了一次对n1的引用,然后是n2,依此类推。
alterne(n,p) = 0alterne(n,p)返回n或p(基于indic变量的当前值,然后将0赋给它。由于这是对alterne的第一次调用,因此它与执行n = 0;相同
alterne(p,q) = 12;由于这是对alterne()的第二次调用,因此与q = 12;相同
无论如何,希望这对你有所帮助。
发布于 2015-10-29 19:39:25
交替函数是一个开关,它在第一次调用时通过引用返回第一个参数,然后在第二次调用时通过引用返回第二个参数。
调用alterne函数后,编译器将用返回引用替换赋值运算符的左侧。然后,赋值运算符的右侧将复制到其中。
https://stackoverflow.com/questions/33412879
复制相似问题