Функция, дающая приоритет переменной GLOBAL вместо LOCAL - (Аномальное поведение) - PullRequest
0 голосов
/ 07 января 2020

У меня есть:

  1. string s = "global" [глобальная область]
  2. string s = "local" [локальная область (основная функция)]

Я хочу функция f1() для вывода локального s при вызове из main, но вместо этого функция печатает глобальный s.

#include <iostream>
using namespace std;

//global variables & functions .h

string s = "global";    void f1();

//main begins
int main()
{
    string s = "local";
    f1();

    return 0;
}

//function definitions .cpp

void f1()
{
    cout << s;
}

Вывод:

global
Process returned 0 (0x0)   execution time : 0.281 s
Press any key to continue.

1 Ответ

4 голосов
/ 07 января 2020

Это потому, что глобальное определение является единственным видимым для f1. В этом разница между лексическим и Dynami c scoping, который я рекомендую вам посмотреть в определениях. C ++ имеет лексическую область, что означает, что он может видеть символы только в зависимости от того, где они определены относительно кода. f1 может видеть только локальные переменные, определенные внутри него, и глобальные переменные, он даже не знает, что переменная в main существует.

...