在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/

10-11 04:17