在侯捷翻译的《C++标准程序库》里面提到(第六章,P144)
“一般而言,各项操作并非绝对安全。调用者必须确保传给操作函数的参数符合需求。违反这些需求(例如使用非法索引)会导致未定义的行为。通常STL自己不会抛出异常。如果STL容器所调用的使用者自定操作(user-defined operations)抛出异常,会导致各不相同的行为。”
如vector为空时,vector[0]这种取下标行为就属于未定义行为,在vc6下没有抛出异常,在vs2005下则抛出异常,根据不同实现而不同。
这也是最近服务器由vc6迁移到vs2005遇到崩溃的原因。
STL的各项操作的安全性应由调用者保证,需要紧记!