【问题标题】:C++ code while returning reference to integer返回整数引用时的 C++ 代码
【发布时间】:2016-01-10 23:20:59
【问题描述】:

我尝试了以下代码:

int& fun()
{
    static int y = 20;
    //y = 40;
    return y;
}
int main()
{
    fun() = 30;
    cout << fun() <<endl;
    return 0;
}

如果 y = 40 行未注释,则 main 的输出为 40。为什么 y 的值在分配给 main() 中的 30 时不会改变?

【问题讨论】:

  • 用调试器单步调试,应该就清楚了。
  • 按照这个逻辑,即使没有 y = 40,fun() 不会将 y 重置为 20 吗?
  • @user4728046 因为静态只初始化一次
  • @Christophe 谢谢!

标签: c++ reference


【解决方案1】:

函数func()的变量ystatic存储时长:

3.7.1/1:所有没有动态存储时长、没有线程存储时长、非本地变量都有静态 储存期限。这些实体的存储将持续到 课程持续时间

3.7.1/3:关键字static可用于声明具有静态存储时长的局部变量。

此类变量的初始化只发生一次。这意味着你第一次使用y 时它的值是 20,之后它会保留你存储在那里的值。

案例1:赋值被注释掉:

语句fun() = 30; 将在y 中存储30。 cout &lt;&lt; fun() 将使用对 y 的引用,而不用 fun() 更改它,因此它将显示 30。

案例 2:分配被激活:

语句fun() = 30; 将在y 中存储30。 cout &lt;&lt; fun() 将使用对 y 的引用,但 fun() 将首先将其设置为 40,因此将显示 40。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2017-02-23
    • 2011-05-23
    • 2013-05-11
    • 2011-02-23
    • 2018-07-15
    相关资源
    最近更新 更多