msc*_*msc 6 c c++ enums declaration language-lawyer
在C中,如果我们在内部重新声明变量enum,那么编译器会给出一个错误"'我'重新声明为不同类型的符号".好的.
#include <stdio.h>
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
printf("%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)
但是,在C++中,如果我们在枚举中重新声明变量,那么它的工作正常.
#include <iostream>
using namespace std;
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
cout<<i<<endl;
}
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么C++编译器没有给重新声明变量带来错误?
Sto*_*ica 10
它没有给出重新声明错误,因为枚举器被引入类范围.回想一下,结构和类在C++中大多可以互换.范围S包含枚举器i.
但是,在C中,struct S没有定义范围.C中只有4种类型的范围:函数,文件,块和函数原型.因此,i将其引入i已定义变量的文件范围.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |