【问题标题】: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 就不是一个很好的问题)。
  • 我会说一个家庭作业问题。
  • 为什么不通过执行代码来确定输出?
  • 输出将是 10 不是真的。

标签: c++ output pass-by-reference


【解决方案1】:

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

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

-O0,它打印10

-O1,它打印30

-O2-O3,它打印0

如果将x声明为static,则它具有静态存储持续时间,这意味着它的生命周期不会在函数返回时结束,这意味着返回对它的引用是合法的。所有对foo 的调用都将返回对相同int 的引用。

【讨论】:

    猜你喜欢
    • 2022-10-05
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多