初学者看C++PRIMER563页的一点疑问
同嵌套类一样局部类可以访问的外围域中的名字也是有限的局部类只能访问在外围
局部域中定义的类型名静态变量以及枚举值例如
int a, val;
void foo( int val )
{
static int si;
enum Loc { a = 1024, b };
class Bar {
public:
Loc locVal; // ok;
int barVal;
void fooBar( Loc l = a ) { // ok: Loc::a
barVal = val; // 错误: 局部对象
barVal = ::val; // OK: 全局对象
barVal = si; // ok: 静态局部对象
locVal = b; // ok: 枚举值
}
};
// ...
}
************************************************************
barVal = val; // 错误: 局部对象 ??为什么错了
问题点数:10、回复次数:2Top
1 楼cuizhq0227(寒青)回复于 2004-06-15 07:55:01 得分 5
很明显,Bar为局部类,函数foo为外围局部域,变量a,val为全局变量,si为局部静态变量,而函数foo的参数val也是局部变量,还有一个a为枚举变量。
所以在局部类Bar中,可以访问局部静态变量si和枚举值b,而访问全局时变量时必须用::,所以barVal = ::val;访问的全局变量,而barVal = val; 访问的是局部变量,所以出错。Top
2 楼kaphoon(齐柏林飞艇)回复于 2004-06-15 08:05:03 得分 5
局部类Bar中只能访问
在外围局部域中定义的类型名静态变量以及枚举值
而barVal = val; // 错误: 局部对象
中的val是void foo( int val )中的val
是个局部变量,所以不能访问,因为
只能访问在外围局部域中定义的类型名静态变量以及枚举值
::val是int a, val;中的val,是全局变量