首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中通过引用传输要返回的值

在C++中通过引用传输要返回的值
EN

Stack Overflow用户
提问于 2015-10-29 19:23:03
回答 3查看 85关注 0票数 1

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

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

2)静态布尔索引的作用;

代码语言:javascript
复制
#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 ; }
}

谢谢你的考虑

EN

回答 3

Stack Overflow用户

发布于 2015-10-29 19:30:14

下面这些对你来说有意义吗?它是一个通过引用获取int并为其赋值的函数。

代码语言:javascript
复制
void foo(int& x)
{
    x = 33;
}

1)我不明白alterne(n,p) = 0alterne(n,p) = 12的意思

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-10-29 19:42:00

代码语言:javascript
复制
int & alterne (int & n1, int & n2)
{
    static bool indic = true;
    if (indic) { indic =false; return n1; }
    else       { indic = true; return n2 ; }
}

让我们来分解一下这个函数:

代码语言:javascript
复制
static bool indic = true;

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

代码语言:javascript
复制
    if (indic) { indic =false; return n1; }
    else       { indic = true; return n2 ; }

这基本上切换了变量indic。如果它是真的,那么之后它就是假的。由于indic在函数调用之间保持值不变,因此函数alterne()基本上在返回n1和返回n2之间交替-从n1开始。

代码语言:javascript
复制
int & alterne (int & n1, int & n2)

该函数接受2个对int的引用,并返回一个对int的引用。正如我们在上面看到的,它实际上只返回了一次对n1的引用,然后是n2,依此类推。

代码语言:javascript
复制
 alterne(n,p) = 0

alterne(n,p)返回n或p(基于indic变量的当前值,然后将0赋给它。由于这是对alterne的第一次调用,因此它与执行n = 0;相同

代码语言:javascript
复制
alterne(p,q) = 12;

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

无论如何,希望这对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-10-29 19:39:25

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33412879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档