我正在阅读 C++ 中的变量作用域,并遇到了一个有趣的块结构:
int main(int argc, char **argv) {
int local;
{ // New level of scope
int more_local;
}
return 0;
}
我知道变量会在每个块的末尾从堆栈中弹出,由右花括号表示}
。
我还读过函数调用也将它们的变量压入堆栈并在调用结束时终止,由右花括号表示}
:
void foo() {
int more_local;
}
int main(int argc, char **argv) {
int local;
foo();
return 0;
}
在这两种情况下如何以不同的方式处理堆栈,两者的优点和缺点是什么?