名称被视为在紧靠其声明符之后,但位于其(可选)初始值设定项之前的位置进行声明。(有关声明符的详细信息,请参阅声明符。)枚举器被视为在紧靠为其命名的标识符之后,但位于其(可选)初始值设定项之前的位置进行声明。
请看以下示例:
// 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
};
由于前面的代码中的标识符已在全局范围中定义,因此产生了错误消息。
备注
使用同一名称引用多个程序元素(例如,枚举器和对象)被视为不好的编程做法,应当避免。在前面的示例中,此做法导致了错误。