有人告诉我,在C(和C++)中,返回语句中存在的变量在关闭函数的大括号之前被销毁.
前 -
int func() {
int a = 10;
return a; // I was told that a is destroyed here
}
Run Code Online (Sandbox Code Playgroud)
它真的发生了吗?如果是,函数如何将值返回给调用函数?
我的直觉告诉我,变量值被推送到返回值的堆栈,当它返回到调用函数时,通过获取返回值来弹出堆栈顶部.不确定我是否正确.
在关闭括号之前C会破坏返回变量吗?
是的......有点儿.
局部变量在方法结束时超出范围,之后,它们将不再可访问.
在C中,这仅仅意味着变量本身的存储可用于其他用途.但是变量没有活跃的"破坏".
在C++中,当变量超出范围时,将调用变量的析构函数(如果有的话).
在实现级别,通常使用堆栈来管理局部变量的存储空间.但我不认为这是各自语言规范的强制要求.
值得注意的是,我们正在讨论的是变量,而不是价值观.在您的例子中,变量的值将被返回给调用者(韦迪的return说法),并会继续存在超越}...