C ++ определяет новую область видимости для переменных каждый раз, когда вы используете {
}
. Посмотрите на этот пример здесь.
const char *foo = "global";
int main(int argc, char* argv[])
{
const char *foo = "hello";
{
cout << foo << endl;
const char *foo = "world";
cout << foo << endl;
cout << ::foo << endl;
}
cout << foo << endl;
}
Когда вы запустите это, вы получите:
hello
world
global
hello
Когда вы открываете новую область и объявляете переменную с тем же именем, что и переменная во вложенной области, вы скрываете переменную во внешней области, пока вы остаетесь в текущей области. Как только вы покидаете внутреннюю область, внешняя переменная снова становится видимой. Если внешняя переменная является глобальной переменной, вы можете получить доступ к глобальному пространству имен ::foo
. Если внешняя переменная является переменной класса, вы можете использовать className::foo
. Если внешняя переменная является просто локальной переменной, доступ к ней невозможен, пока вы не покинете область, в которой вы объявили переменную, которая ее скрыла.
Я давно не использовал C, поэтому C99, скорее всего, будет другим, но в более старом C нет доступа к скрытому имени.
const char *foo = "global";
int main(int argc, char* argv[])
{
const char *foo = "hello";
{
char *foo = "world";
printf("%s\n", foo);
}
printf("%s\n", foo);
return 0;
}
Когда вы запустите это, вы получите:
world
hello