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