哪位看看C++Primer的问题,局部域的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/07 00:26:45
C++ Primer13章的最后一段代码.看不懂?

int a,val;
void foo(int val)
{
static int si;
enum Loc {a = 1024,b};
class Bar{
public:
Loc locVal;
int barVal;
void fooBar(loc1 = a)
barVal = val; //error : local object
barVal = ::val;//ok: global object
barVal = si;
locVal = b;
}
}
//...
}
请问为什么barVal = val; 这一句是错误的.
本地对象,非静态的本地对象不能访问?

局部类(这里的Bar类)只能访问外围局部域(这里的foo函数)中的【类型名】【静态变量】和【枚举值】这些静态的东西,而不能访问普通变量。

在fooBar函数中直接写barVal=val的话,这个val会被认为是函数foo的参数val,而不是全局变量val。在fooBar中访问foo的参数是非法的。