与作用域相关的局部变量定义,C++

Local variables definition in relation to scope, C++

当考虑 main 内部的局部变量时,例如

#include <iostream>
void doNothing(int x)
{
}

int main()
{
  int x{0}, y{0};
  doNothing(x);
  
  return 0;
}

当输入函数 doNothing() 时,两个变量 (x,y) 是否仍被考虑在范围内?我知道变量范围扩展到可以在源代码中访问标识符的位置,但据我了解,在函数 doNothing()

内部无法访问 y

如果理解局部变量的生命周期从进入作用域开始到离开作用域结束,那么它的生命周期会结束并在运行时返回 main() 时恢复吗?

我认为这是不可能的,因为必须重新定义和重新实例化变量,这意味着返回到 main() 的顶部,但是怎么仍然认为 y 仍在范围内? doNothing(x) 的等待函数调用是否仍在范围内?

(我知道这似乎是一个愚蠢的问题,因为它显然必须以某种方式在范围内,我只是想对我正在处理的所有事情都有一个清晰的定义,也许想得太多了)

这个问题来自我目前正在学习的编码教程中提供的注释,

Note that local variables have the same definitions for scope and lifetime. For local variables, scope and lifetime are linked -- that is, a variable’s lifetime starts when it enters scope, and ends when it goes out of scope.

Would both variables (x,y) still be considered in scope when the function doNothing()

你问题中的问题是作用域没有时间概念。它只有位置的概念。

符号不会在程序执行时进出范围。 Symbols 在程序中给定位置处在范围内或范围外。

作用域是指一个变量的'visibility',所以变量xy的作用域被限制在main().

y would be inaccessible inside of the function doNothing()

完全正确!

If it is to be understood that a local variables lifetimes starts when it enter scope and ends when it goes out of scope, would its lifetime then end and be reinstated when returning to main() during runtime?

不完全是。听起来你在问变量在内存中存在多长时间,这通常是生命周期所指的。 xy 等局部变量在 main() 开始时被放入内存,但在 main() 结束时被释放。

此页面可能 helpful 用于了解范围和生命周期。 一些要点:

  • A variable begins to exist when the variable is defined
  • A variable stops to exist at the end of the scope in which the variable is defined

希望这对您有所帮助:)