【问题标题】:Is there a way to access the value of a local variable that has become hidden inside another scope?有没有办法访问已隐藏在另一个范围内的局部变量的值?
【发布时间】:2011-08-13 00:14:34
【问题描述】:

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

我在想这样的事情:

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

如果语言不支持这一点,那么我完全可以接受一些 hacky 解决方案。

【问题讨论】:

  • 这称为遮蔽,您不能“取消遮蔽”外部x 来引用它。哈克解决方案是-Wshadow -Werror

标签: c++ scope


【解决方案1】:

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

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

【讨论】:

  • 或引用而不是指针:int &outer_x = x; 紧接在 int x = 2; 之前。
【解决方案2】:

我认为 C++ 不支持这个。

【讨论】:

    【解决方案3】:

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

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

    顺便说一下,using 非常有用,如果您不小心在子类中使用同名但签名不同的方法“隐藏”了一个方法。

    【讨论】:

      【解决方案4】:

      C++ 不允许这样做。

      你想弄到什么程度?因为您知道第一个变量将在堆栈中的第二个变量旁边。用调试器检查。不是很便携,但如果需要,您可以尝试一下。

      (&x+1)
      

      【讨论】:

        猜你喜欢
        • 2012-01-11
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多