Есть ли способ получить доступ к значению локальной переменной, которая стала скрытой в другой области видимости? - PullRequest
4 голосов
/ 13 августа 2011

Я знаю, что если переменная является глобальной, вы всегда можете получить доступ к ее значению, поставив перед именем переменной :: ... но есть ли способ получить доступ к значению локальной переменной, которая скрыта в другой области

Я думаю о чем-то вроде этого:

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

Если язык не поддерживает это, тогда я вполне согласен с каким-нибудь хакерским решением.

Ответы [ 4 ]

6 голосов
/ 13 августа 2011

Вы можете назначить адрес внешнего x объекту-указателю, а затем обратиться к нему через указатель во внутренней области видимости (при условии, что другой объект-указатель с таким же именем скрывает его).

Или, пока вы редактируете код, вы можете изменить имя .

0 голосов
/ 13 августа 2011

C ++ не позволяет этого.

Как хакер ты хочешь получить? Потому что вы знаете, что первая переменная будет рядом со второй в стеке. Проверьте с помощью отладчика. Не очень портативный, но вы можете попробовать это, если вам нужно.

(&x+1)
0 голосов
/ 13 августа 2011

Я думаю, что C ++ не поддерживает это.

0 голосов
/ 13 августа 2011

Я так не думаю.Если затененная переменная не является глобальной переменной, переменной в другом пространстве имен или переменной-членом класса или любого из его предков или любого другого класса, она остается недоступной.

Может существовать некоторая специфичная для компилятораобман с ключевым словом using, но я бы не стал ему доверять.

Кстати, using очень полезен, если вы случайно "затеняли" метод в подклассе методом с тем же именемно другая подпись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...