初学者看C++PRIMER563页的一点疑问

初学者看C++PRIMER563页的一点疑问

楼主ywg19541228(study more and more) 2004-06-15 06:19:46 在 C/C++ / C++ 语言 提问

同嵌套类一样局部类可以访问的外围域中的名字也是有限的局部类只能访问在外围  
  局部域中定义的类型名静态变量以及枚举值例如  
  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,是全局变量  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值