在C语言中,如果我们在enum
内重新声明变量,则编译器会给出一个错误,即“'i'被重新声明为另一种符号”。确定。
#include <stdio.h>
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
printf("%d\n", i);
}
但是,在C++中,如果我们在枚举内部重新声明变量,则它可以正常工作。
#include <iostream>
using namespace std;
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
cout<<i<<endl;
}
我不明白,为什么C++编译器没有为重新声明变量给出错误?
最佳答案
因为枚举器被引入到类范围内,所以它不会产生重新声明错误。回想一下,结构和类在C++中通常是可互换的。 S
的范围包含枚举器i
。
但是在C语言中,struct S
没有定义范围。 C语言中只有4种作用域:函数,文件,块和函数原型(prototype)。这样,i
被引入到已经定义了i
变量的文件作用域中。
关于c++ - 在枚举内重新声明变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48182007/