从内部作用域访问阴影变量

H.D*_*Das 0 c++ c++14 c++17

我的代码:

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 值的语法。

Naa*_*Hai 6

您不能简单地实现这一点,因为内部变量只是掩盖了外部作用域变量。

如果内部块声明的变量与外部块声明的变量同名,则外部块变量的可见性在内部块声明的点处结束。

但是,如果您仍然需要实现这一点,您可以采取一些措施将变量值存储在堆栈中,以保存每个范围的变量值。这类似于在函数调用期间所做的事情(只是一个修订版,仅存储您需要的变量)。

我仍然建议您为变量使用单独的名称,因为这会降低代码的可读性。