怎么样理解“遮挡”这个概念?

怎么样理解“遮挡”这个概念?

static int a;void main(){ int a;}这里的局部变量a是在mian函数的作用域内的,而上面的static int a;在全局范围内的,那么根据c++的语法机制,局部的a会遮掩全局的a请看下面的例子#include<iostream>using namespace std;static int a = 0;void f(){ int a = 1; cout << a << endl; cout << ::a << endl;}int main(){ f(); return 0;}这个输出先输出的1,也就是说局部的吧全局的给遮掩掉了,要输出全局的必须加上作用域符号才能找到。

但是void main(){ int a; static int a;}这个你的a都是在一个作用域里定义的,那么当然会出现符号重定义的错误。

这类问题主要是跟作用域有关。

首页