【问题标题】:What is the difference between the outputs of these two programs and why? [duplicate]这两个程序的输出有什么区别,为什么? [复制]
【发布时间】:2013-08-01 19:03:46
【问题描述】:

这里有两个程序。它们都有一个函数 fun(),其返回类型是对整数的引用。只有两个函数之间的区别在于,在一个函数中 x 被声明为 static int 而在另一个函数中则不是。第一个问题的输出是 10,第二个问题的输出是 30。如何?

方案一:

#include<iostream>
using namespace std;

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

方案二:

#include<iostream>
using namespace std;

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

【问题讨论】:

  • 第一个程序调用未定义的行为,第二个没有。
  • 什么是未定义的行为?你能告诉我为什么两个程序的输出不同吗?
  • 你可以google“未定义的行为”,你会明白的。

标签: c++ static


【解决方案1】:

程序 1:您返回对一个变量的引用,该变量在函数返回后立即停止存在,然后将值 30 存储到该不存在的变量中,这可能会或可能不会使您的机器崩溃。不管怎样,下面对 fun() 的调用会重新初始化一个局部变量“x”并返回它。

程序 2:函数范围内的静态变量有点像只能由该函数访问的全局变量。您返回对该静态(仍然存在)的引用,并设置其值。当您再次调用该函数时,静态仍然具有您分配给它的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2016-05-08
    • 2019-11-15
    • 2012-03-21
    相关资源
    最近更新 更多