我有:
string s = "global"
[全局范围]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.
这是因为全局定义是f1
唯一可见的定义。这是lexical和dynamic作用域之间的区别,我建议您查找其定义。 C ++的作用域是[[lexical,这意味着它只能根据符号相对于代码的定义位置看到符号。 f1
只能看到内部定义的局部变量和全局变量,甚至不知道main
中的变量存在。