用 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++ 输出,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

c++里边string类用数组的形式输入为啥无法用cout输出?

C++中cout<<字符数组名;为啥能输出字符串?

C++:为啥输出迭代器不支持比较操作?

为啥我没有任何输出?

为啥 C++ 使用模数时输出负数?

为啥在 c++ 11 和 c++ 17 中给出代码存在输出差异?