在计算初始化值时是否考虑了变量?

Mis*_*ody 5 c++ enums variable-initialization variable-declaration

这是我的小程序:

enum Type
{
    b = 1,
    c = 2
};

int main()
{
    Type b = b;
    std::cout << b << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个输出0.我可以得出结论,上述定义包含这些连续步骤吗?

  1. 声明b为变量的类型Type
  2. 使用0默认值定义该变量和初始化
  3. 评估它的新值,包括变量本身(值为0)
  4. 将新值分配给变量.

并且,变量是否始终用0初始化,即使它们是显式初始化的?

我的第二个问题是 - 如果它在指定的例子中使用了它的初始化列表中的变量,为什么我不会得到关于歧义的错误?编译器是否首先尝试b在变量列表中查找,然后才检查声明的枚举?

Som*_*ude 7

第1步是正确的,但其余的都是错误的.会发生什么b是定义变量并立即初始化为变量的值b.这会导致未定义的行为,因为b在它自己的初始化中使用它之前没有初始化.

如果你想将它初始化为Type::b那么你需要明确地写出:

Type b = Type::b;
Run Code Online (Sandbox Code Playgroud)