假設代碼看起來依稀像這樣:(C++)只有迭代器可用時才爲迭代器查找end()?
bool LoadGame() {
vector<string> SaveFile = LoadFromSaveFile();
Data = SaveFile.begin();
LoadCharacters(&Data);
// containing LoadOneCharacter(&Data) calls
LoadLocations(&Data);
// >> LoadOneLocation(&Data) calls
// etc.
}
有沒有什麼辦法來檢查數據是否正在指着SAVEFILE :: LoadCharacters(),LoadLocations()等內結束(),同時,不及格SaveFile :: end()到LoadGame()調用的所有函數?
(如果只是取消引用結束()及以後拋出一個異常,而不是產生未定義行爲!)
謝謝。我想現在我會安全地玩。 – ExOttoyuhr
@ExOttoyuhr一個合理的策略。請注意,這不是爲了安全起見,而是要堅持只記錄庫的行爲。其餘的不僅不安全,它只是不受支持,可能會因構建配置,庫版本等而中斷。只是沒有選擇,真的(**除非你自己控制迭代器實現**) – sehe
這就是我的意思是「安全地玩它」。 :)僅僅因爲特定編譯器的特定版本產生的未定義行爲可能是可取的,並不意味着使用該行爲是一個好主意。 (至於標準的個人實現,不必擔心個人實現是什麼標準。)(看看我的原始評論,我真的很遺憾地說「現在」,這聽起來像是我將進入C++道奇城一刻,它適合我的幻想......) – ExOttoyuhr