加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么可以访问范围之外的枚举器?

发布时间:2020-12-16 07:21:00 所属栏目:百科 来源:网络整理
导读:为什么你可以访问范围之外的枚举数,而你不能直接访问结构的成员?根据范围,我的意思是声明范围 – 如果我错了,请纠正我. 举个例子: 你可以这样做: enum colors {red,blue,white};int color = red; 但你不能这样做: struct colors {red,white};int color =
为什么你可以访问范围之外的枚举数,而你不能直接访问结构的成员?根据范围,我的意思是声明范围 – 如果我错了,请纠正我.

举个例子:
你可以这样做:

enum colors {red,blue,white};
int color = red;

但你不能这样做:

struct colors {red,white};
int color = red;

谢谢!

解决方法

好吧,正如另一条评论所说,这是因为这就是C的运作方式.

回到过去,我们用类似的方式模拟了这样的东西

class Colors {
  public:
    static int RED = 0;
    static int GREEN = 1;
    static int YELLOW = 2;
}

然后添加了枚举,因此您不需要编写Colors.RED.它基本上是语法糖.

更新

范围只是名称可见的程序的一部分.规则可以简单,复杂或怪异:C代表复杂,JavaSccript很奇怪.你可以看到冗长的解释here和here,但这是一个基本的概念.

在C中,这是一种来自Algol 60的块结构语言,在声明它的块中定义了一个名称.一种块是文件.如果在文件顶部声明了名称,则在声明后的文件中的任何位置都会定义该名称.

另一种块由一对括号{}定义.在括号内声明的任何内容都是从声明到封闭的末端括号中定义的.所以

#include <stdlib>  // copies a bunch of code into the file
int foo = 0;       // declared here,visible to end.

int fn(){
  int bar = 2 ;
  if(bar == 2){
    foo = bar;
    cout << bar << nl;  // gives '2'
    cout << foo << nl;  // still gives '2'
  }
  cout << foo << nl ;  // gives '0'
  cout << bar << nl ;  // compile time error 'bar' not defined
}

为什么?内部foo隐藏了外部foo,因此是在if块中打印的那个.条形图定义在if块的顶部,因此在大括号结束if块后它不再可见(“不再在范围内”)

有更多的规则,但我建议在其中一个链接或一本好的C书中阅读它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读