答案 0 :(得分:2)
这句话可以更好地表达。你需要先做一些观察。
范围是一种语义结构。它定义了您可以使用名称的位置(对于变量,类型,函数等)。这个名称将引用什么。
有不同类型的范围。相当多的只是编译时间的事情。例如,名称空间和类也定义了一个范围。
函数还定义范围,但函数"运行"。因此,它们的上下文必须具有某种运行时表示。
递归需要调用相同的函数,但每次重入调用的函数上下文必须不同。
最后一点是为什么"调用堆栈"通常用于实现函数调用。每个堆栈记录与正在运行的函数的上下文相关。因此,函数范围中的名称将引用调用堆栈上的项目。
答案 1 :(得分:0)
答案不是C ++特有的。 C ++在运行之前使用了一个编译模型(至少在概念上,实现可能不同)。在C ++模型中,范围在编译时解析。编译器可以很好地使用某种堆栈数据结构。
在运行时,有一个函数调用堆栈,这通常包含函数返回地址和每个活动函数的局部变量,但在C ++中,此运行时堆栈不需要保留范围。