声明点

名称被视为在紧靠其声明符之后,但位于其(可选)初始值设定项之前的位置进行声明。(有关声明符的详细信息,请参阅声明符。)枚举器被视为在紧靠为其命名的标识符之后,但位于其(可选)初始值设定项之前的位置进行声明。

请看以下示例:

// point_of_declaration1.cpp
// compile with: /W1 
double dVar = 7.0;
int main()
{
   double dVar = dVar;   // C4700
}

如果声明的位置位于初始化之后,则本地 dVar 将初始化为 7.0(全局变量 dVar 的值)。 但是,由于情况并非如此,dVar 将初始化为未定义值。

枚举器遵循同一规则。 但是,枚举器将导出到枚举的封闭范围。 在以下示例中,将声明枚举器 Spades、Clubs、Hearts 和 Diamonds。 由于枚举器导出到封闭范围,因此将它们视为具有全局范围。 该示例中的标识符已在全局范围中定义。

考虑下列代码:

const int Spades = 1, Clubs = 2, Hearts = 3, Diamonds = 4;
enum Suits
{
    Spades = Spades,     // error
    Clubs,               // error
    Hearts,              // error
    Diamonds             // error
};

由于前面的代码中的标识符已在全局范围中定义,因此产生了错误消息。

备注

使用同一名称引用多个程序元素(例如,枚举器和对象)被视为不好的编程做法,应当避免。在前面的示例中,此做法导致了错误。

请参见

参考

范围