c++中的输出以及原因

Output in c++ and why?

本文关键字:输出 c++      更新时间:2023-10-16

代码

#include<iostream>
using namespace std;

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

输出将是10,告诉我如何以及何时将int x=10更改为静态int x=10输出将是30。解释这两种情况。

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

g++用这个代码做的事情很有趣:

-O0,它打印10

-O1,它打印30

-O2-O3,它打印0

如果您将x声明为static,那么它具有静态存储持续时间,这意味着当函数返回时,它的生存期不会结束,这意味着您可以合法地返回对它的引用。所有对foo的调用都将返回对同一int的引用。