【问题标题】:How does this piece of C++ code work?这段 C++ 代码是如何工作的?
【发布时间】:2015-09-01 12:11:48
【问题描述】:

我在 Geek For Geeks 中看到了以下示例。

#include<iostream>
using namespace std;

int &fun()
{
    static int x = 10;
    return x;
}
int main()
{
    fun() = 30;
    cout << fun();
    return 0;
}

Answer is 30.

但我无法映射,这个值是如何得出的。请帮助我了解这段代码的工作原理。

经过一些专家的回答,我知道分配给函数的值是分配给静态变量 x 相当于 fun()::x =30

现在,我尝试了一段不同的代码。我在 fun() 中有 2 个静态变量并返回第二个变量引用。答案仍然是 30。是因为当 fun() 被赋值时,它会将值 30 赋给 fun() 中的所有变量?

第二段代码是

#include<iostream>
using namespace std;

int &fun()
{
    static int x = 10;
    static int y =20;
    return y;
}
int main()
{
    fun() = 30;
    cout << fun();
    return 0;
}

【问题讨论】:

  • 搜索和阅读references,以及了解static局部变量的特别之处。

标签: c++ reference return-value


【解决方案1】:

funfuns 范围内返回对static 变量x 的引用(int&amp;)。所以基本上声明fun() = 30fun::x = 30。请注意,这只是安全的,因为 xstatic

【讨论】:

    【解决方案2】:

    函数局部静态变量在第一次进入函数时被初始化并持续到程序结束。所以当你打电话时

    fun() = 30;
    

    您返回对该变量的引用,然后将 30 分配给它。由于变量仍然存在,它将保持该值。那么

    cout << fun();
    

    将再次返回变量。由于它已经被初始化,它不会重置它的值,它会返回 30,因为它是在前一行中设置的。

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多