有没有办法访问已隐藏在另一个范围内的局部变量的值?

时间:2011-08-13 00:14:35

标签: c++ scope

我知道如果一个变量是全局的,你总是可以通过在::之前加上变量名来访问它的值...但是有没有办法访问隐藏在里面的局部变量的值另一个范围?

我想到这样的事情:

void f() {
    int x = 1;
    {
        int x = 2;
        //access the value of the variable x (with the 1 in it) inside here
    }
}

如果语言不支持这个,那么我对一些hacky解决方案完全没问题。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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

using关键字可能存在一些特定于编译器的技巧,但我不相信它。

顺便说一句,using非常有用,如果你不小心使用同名但签名不同的方法“遮蔽”子类中的方法。

答案 2 :(得分:0)

我认为C ++不支持这一点。

答案 3 :(得分:0)

C ++不允许这样做。

你想得到多少hacky?因为你知道第一个变量将在堆栈的第二个变量旁边。检查调试器。不太便携,但如果需要,你可以试试。

(&x+1)