gpt4 book ai didi

C++ 函数调用与堆栈上推送/弹出的新 block

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:48 25 4
gpt4 key购买 nike

我在阅读 C++ 中的变量作用域时遇到了一个有趣的 block 结构:

int main(int argc, char **argv) {
int local;

{ // New level of scope
int more_local;
}

return 0;
}

我知道变量在每个 block 的末尾从堆栈中弹出,由右花括号 } 表示。

我还读到函数调用也会将它们的变量压入堆栈并在调用结束时终止,用大括号 } 表示:

void foo() {
int more_local;
}

int main(int argc, char **argv) {
int local;
foo();

return 0;
}

堆栈在这两种情况下的处理方式有何不同,两者的优缺点是什么?

最佳答案

通过函数调用,您将返回地址压入堆栈并创建一个新的堆栈帧。如果您只是将部分代码括在花括号中,那么您就是在定义一个新的范围,正如您所说的。它们就像 if、for、while 等控制语句后的任何代码块。

你不能在这里真正谈论优点和缺点,因为这是两个完全不同的东西。将代码块括在大括号中不会使您受益的情况并不多,而且它会使代码更难阅读。

关于C++ 函数调用与堆栈上推送/弹出的新 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com