函数的返回值如何工作?

Dir*_*irk 6 c++ stack

我最近有一个严重的错误,我忘了在函数中返回一个值.问题是,即使没有返回任何内容,它在Linux/Windows下运行良好,只在Mac下崩溃.当我打开所有编译器警告时,我发现了这个错误.

所以这是一个简单的例子:

#include <iostream>

class A{
public:
    A(int p1, int p2, int p3): v1(p1), v2(p2), v3(p3)
    {
    }

    int v1;
    int v2;
    int v3;
};

A* getA(){
    A* p = new A(1,2,3);
//  return p;
}

int main(){

    A* a = getA();

    std::cerr << "A: v1=" << a->v1 << " v2=" << a->v2 << " v3=" << a->v3 << std::endl;  

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在Linux/Windows下运行而不会崩溃?如何在较低级别完成值的返回?

ham*_*ene 7

在英特尔架构上,通常会在eax寄存器中返回简单值(整数和指针).该寄存器(以及其他寄存器)在内存中移动值时也用作临时存储,在计算过程中也用作操作数.因此,该寄存器中剩余的任何值都被视为返回值,在您的情况下,它确实是您想要返回的内容.

  • @ user384706因为它是C++标准(6.6.3/2)允许的.我自己想知道为什么在地球上他们保持这种方式. (5认同)