C++ 有没有办法访问隐藏在另一个作用域中的局部变量的值?

C++ 有没有办法访问隐藏在另一个作用域中的局部变量的值?,c++,scope,C++,Scope,我知道如果一个变量是全局变量,您可以通过在变量名前面加上:…来访问它的值。。。但是有没有办法访问隐藏在另一个作用域中的局部变量的值 我在想这样的事情: void f() { int x = 1; { int x = 2; //access the value of the variable x (with the 1 in it) inside here } } 如果语言不支持这一点,那么我完全可以使用一些黑客解决方案。您可以将外部x的地

我知道如果一个变量是全局变量,您可以通过在变量名前面加上
…来访问它的值。。。但是有没有办法访问隐藏在另一个作用域中的局部变量的值

我在想这样的事情:

void f() {
    int x = 1;
    {
        int x = 2;
        //access the value of the variable x (with the 1 in it) inside here
    }
}
如果语言不支持这一点,那么我完全可以使用一些黑客解决方案。

您可以将外部x的地址分配给指针对象,然后通过内部作用域中的指针引用它(假设没有另一个同名指针对象隐藏它)


或者,只要您正在编辑代码,就可以更改名称

我不这么认为。除非阴影变量是全局变量、另一个命名空间中的变量或该类或其任何祖先或任何其他类的成员变量,否则它仍然不可访问

使用关键字可能会有一些特定于编译器的技巧,但我不相信它


顺便说一下,使用如果在一个子类中用相同的名称但不同的签名方法意外地“影子”一个方法是非常有用的。

< P>我认为C++不支持这个。

< P> C++不允许。 你想变得多黑?因为您知道第一个变量将位于堆栈上第二个变量的旁边。使用调试器进行检查。不是很方便携带,但如果需要,你可以试试

(&x+1)

这称为阴影,您不能“取消阴影”外部
x
以引用它。Hacky解决方案是
-Wshadow-Werror
。或者是一个引用而不是指针:
int&outer\u x=x紧跟在
intx=2之前