C++标准库 - 教程和参考,第2版是指STL的安全版本,它支持各种实用程序,例如运行时边界检查operator []
和其他操作符.例如,在p247上:
因此,至少在软件开发期间使用"安全"STL是个好主意.Cary Horstmann介绍了安全STL的第一个版本(参见[SafeSTL]).另一个例子是"STLport",它几乎可以在[STLPort]的任何平台上免费使用.此外,库供应商现在提供标志以实现"更安全"的模式,尤其应该在开发期间启用.
这两个建议的软件包似乎相对过时(最后一次开发于2008年),并且不包含更新的C++ 11/14功能.对于Linux(gcc
或clang
)上的某些主要编译器或作为独立库,是否有更新的可信实现?
libstdc ++有一个调试模式,可以通过定义_GLIBCXX_DEBUG
编译时启用.
libstdc ++调试模式执行C++标准的许多方面的检查,但重点是检查标准迭代器,容器和算法之间的交互,包括:
安全迭代器:迭代器跟踪它们引用的元素的容器,因此会立即诊断出错误,例如递增过去的迭代器或取消引用指向已被破坏的容器的迭代器.
算法前置条件:算法尝试验证其输入参数以尽早检测错误.例如,
set_intersection
算法要求其迭代器参数first1
并last1
形成有效的迭代器范围,并且序列[first1, last1)
根据传递给set_intersection的相同谓词进行排序.如果序列未排序或由不同的谓词排序,libstdc ++调试模式将检测错误.
operator[]
包括登记入境.