在枚举中重新声明变量

时间:2018-01-10 07:07:29

标签: c++ c enums language-lawyer declaration

在C中,如果我们在json_encode( array_values( array_intersect_key($result, array_flip(array_rand($result, 5))))); 内重新声明变量,那么编译器会给出一个错误“'我'重新声明为不同类型的符号”。好的。

enum

但是,在C ++中,如果我们在枚举中重新声明变量,那么它的工作正常。

#include <stdio.h>

int i = 10;

struct S 
{ 
    enum 
    {
        i = 20
    }e; 
};

int main()
{
    printf("%d\n", i);
}

我不明白,为什么C ++编译器没有给重新声明变量带来错误?

1 个答案:

答案 0 :(得分:10)

它没有给出重新声明错误,因为枚举器被引入类范围。回想一下,结构和类在C ++中大多可以互换。 S的范围包含枚举器i

但是在C中,struct S没有定义范围。 C中只有4种类型的范围:函数,文件,块和函数原型。因此,i被引入到已定义变量i的文件范围中。