執行點
名稱會視為在緊接著它的宣告子之後、但是在它的 (選擇性) 初始設定式之前宣告 (如需宣告子的詳細資訊,請參閱宣告子)。列舉程式會視為在緊接著為它命名的識別項之後、但是在它的 (選擇性) 初始設定式之前宣告。
請考量以下範例:
// 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
};
由於上述程式碼中的識別項已在全域範圍中定義,因此會產生錯誤訊息。
注意事項 |
---|
使用相同名稱參考多個程式項目 (例如,列舉程式和物件) 會視為不良的程式設計做法,應該加以避免。在上述範例中,這種做法會造成錯誤。 |