用 c++ 输出,为啥?
Posted
技术标签:
【中文标题】用 c++ 输出,为啥?【英文标题】:Output in c++ and why?用 c++ 输出,为什么? 【发布时间】:2014-09-11 13:23:29 【问题描述】:代码
#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。解释这两种情况。
【问题讨论】:
这个措辞几乎就像一个面试问题(如果是,IMO 就不是一个很好的问题)。 我会说一个家庭作业问题。 ***.com/questions/8610350/… 为什么不通过执行代码来确定输出? 输出将是 10 不是真的。 【参考方案1】:这是未定义的行为。您正在返回对一个局部变量的引用,该变量的生命周期在函数结束时结束。
g++ 对这段代码的处理非常有趣:
在-O0
,它打印10
。
在-O1
,它打印30
。
在-O2
和-O3
,它打印0
。
如果将x
声明为static
,则它具有静态存储持续时间,这意味着它的生命周期不会在函数返回时结束,这意味着返回对它的引用是合法的。所有对foo
的调用都将返回对相同int
的引用。
【讨论】:
以上是关于用 c++ 输出,为啥?的主要内容,如果未能解决你的问题,请参考以下文章