遇到return语句时编译器会做什么?

时间:2018-02-26 14:58:37

标签: c++ c++11

我有这个代码: -

int i;
class A
{
public:
    ~A()
    {
        i = 10;
    }
};

int& foo()
{
    i = 3;
    A ob;
    return i;
}

int main()
{
    cout << "i = " << foo() << endl; //call to foo
    return 0;
}

我对在遇到return i语句后编译器执行此代码的顺序感到困惑。 我猜:       调用者(main)的变量(比如K)并且对它的引用被传递给foo(),当遇到return语句时,编译器将return语句的值复制到K中,在这种情况下是地址i,作为参考被退回。然后它跳转到foo()的末尾并调用类对象ob的析构函数,它将i的值更改为10.然后删除foo()及其所有变量(包括对K的引用传递给foo)来自调用堆栈并且控件返回到main,其中K将调用替换为foo()并且实现了cout。 这是编译器采取的正确操作顺序吗?

我广泛搜索了调用返回时内存中发生的情况,this是最好的结果,尽管它是针对C#的。

0 个答案:

没有答案