我的代码:
int num = 1; // global scope
int main(){
int num = 2; // local scope 1
{ // local scope 2
int num = 3;
{ // local scope 3
int num = 4;
std::cout<<num<<"\n"; // printing local scope 3
std::cout<<::num<<"\n"; // printing global scop
// but here how to print local scope 1, 2 variables
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码中的人有嵌套的作用域,我想从“本地作用域 3”打印所有具有相同名称的变量,包括阴影变量。但是,我可以打印全局和局部范围 3 的 num 值,但我不知道访问局部范围 1 和 2 的 num 值的语法。
您不能简单地实现这一点,因为内部变量只是掩盖了外部作用域变量。
如果内部块声明的变量与外部块声明的变量同名,则外部块变量的可见性在内部块声明的点处结束。
但是,如果您仍然需要实现这一点,您可以采取一些措施将变量值存储在堆栈中,以保存每个范围的变量值。这类似于在函数调用期间所做的事情(只是一个修订版,仅存储您需要的变量)。
我仍然建议您为变量使用单独的名称,因为这会降低代码的可读性。