C++ 以c++;为什么?

C++ 以c++;为什么?,c++,output,pass-by-reference,C++,Output,Pass By Reference,代码 #包括 使用名称空间std; int&fun() { int x=10; 返回x; } int main() { fun()=30; cout这是未定义的行为。您正在返回对局部变量的引用,该局部变量的生存期已在函数末尾结束 g++对这段代码的处理非常有趣: 此时,它将打印10 此时,它将打印30 在和处,它打印0 如果将x声明为static,则它具有静态存储持续时间,这意味着它的生存期不会在函数返回时结束,这意味着返回对它的引用是合法的。对foo的所有调用都将返回对相同int的引用,这一措

代码

#包括
使用名称空间std;
int&fun()
{
int x=10;
返回x;
}
int main()
{
fun()=30;

cout这是未定义的行为。您正在返回对局部变量的引用,该局部变量的生存期已在函数末尾结束

g++对这段代码的处理非常有趣:

此时,它将打印
10

此时,它将打印
30

在和处,它打印
0


如果将
x
声明为
static
,则它具有静态存储持续时间,这意味着它的生存期不会在函数返回时结束,这意味着返回对它的引用是合法的。对
foo
的所有调用都将返回对相同
int
的引用,这一措辞几乎像采访一样问题(如果是的话,在我看来,这不是一个很好的问题)。我会说一个家庭作业问题。为什么不通过执行代码来确定输出?输出将是10,实际上不是。
#include<iostream>
using namespace std;


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