函数优先于GLOBAL变量,而不是LOCAL-(异常行为)

问题描述 投票:-1回答:1

我有:

  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.
c++ function scope global-variables
1个回答
2
投票

这是因为全局定义是f1唯一可见的定义。这是lexicaldynamic作用域之间的区别,我建议您查找其定义。 C ++的作用域是[[lexical,这意味着它只能根据符号相对于代码的定义位置看到符号。 f1只能看到内部定义的局部变量和全局变量,甚至不知道main中的变量存在。

© www.soinside.com 2019 - 2024. All rights reserved.