默認情況下,std::stack
的「基礎容器」是std::deque
。因此,std::deque
未定義的行爲對於std::stack
是未定義的行爲。當描述成員函數的行爲時,其他站點「有效地」使用術語。我認爲這是爲了所有意圖和目的。因此,調用top()
和pop()
相當於調用back()
和pop_back()
,並且在空容器上調用這些屬性是未定義的行爲。爲什麼在STL中允許未定義的行爲?
從我的理解,它的未定義行爲的原因是爲了保持無丟包保證。我的推理是,operator[]
對於std::vector
有一個無丟包保證,如果容器大小大於N,它是未定義的行爲,但at()
有很強的保證,如果n超出範圍則引發std::out_of_range
。
所以我的問題是,什麼是背後的一些事情有可能未定義的行爲和有沒有保證與強有力的保證,但拋出異常,而不是保證?