C++ Linux上STL的安全版本

C++ Linux上STL的安全版本,c++,gcc,stl,clang,C++,Gcc,Stl,Clang,指STL的安全版本,它支持各种实用程序,如运算符[]和其他运算符的运行时边界检查。例如,在p247上: 因此,至少在软件开发过程中,使用“安全”STL是一个好主意 发展。Cary Horstmann介绍了安全STL的第一个版本(参见)。另一个例子是“STLport”,它是 几乎在任何平台上免费提供。此外 库供应商现在提供标志以启用“更安全”模式,该模式 尤其是在开发过程中应该启用 这两个建议的软件包似乎都相对过时(最后一次开发是在2008年),并且没有包含更新的C++11/14特性。Linux上

指STL的安全版本,它支持各种实用程序,如
运算符[]
和其他运算符的运行时边界检查。例如,在p247上:

因此,至少在软件开发过程中,使用“安全”STL是一个好主意 发展。Cary Horstmann介绍了安全STL的第一个版本(参见)。另一个例子是“STLport”,它是 几乎在任何平台上免费提供。此外 库供应商现在提供标志以启用“更安全”模式,该模式 尤其是在开发过程中应该启用

这两个建议的软件包似乎都相对过时(最后一次开发是在2008年),并且没有包含更新的C++11/14特性。Linux上的一些主要编译器(
gcc
clang
)或作为独立库,是否有最近的著名实现可用?

libstdc++有一个,可以通过在编译时定义
\GLIBCXX\u DEBUG
来启用

LISTSTDC++Debug模式对C++标准的许多领域进行检查,但重点是检查标准迭代器、容器和算法之间的交互,包括:

  • 安全迭代器:迭代器跟踪其引用的元素所在的容器,因此会立即诊断错误,例如递增超过结束迭代器的值或取消对指向已破坏容器的迭代器的引用

  • 算法先决条件:算法尝试验证其输入参数以尽早检测错误。例如,
    set\u intersection
    算法要求其迭代器参数
    first1
    last1
    形成有效的迭代器范围,并且序列
    [first1,last1)
    根据传递给set_intersection的同一谓词进行排序;如果序列未排序或按其他谓词排序,libstdc++调试模式将检测到错误

操作符[]

\u GLIBCXX\u DEBUG来启用边界检查

LISTSTDC++Debug模式对C++标准的许多领域进行检查,但重点是检查标准迭代器、容器和算法之间的交互,包括:

  • 安全迭代器:迭代器跟踪其引用的元素所在的容器,因此会立即诊断错误,例如递增超过结束迭代器的值或取消对指向已破坏容器的迭代器的引用

  • 算法先决条件:算法尝试验证其输入参数以尽早检测错误。例如,
    set\u intersection
    算法要求其迭代器参数
    first1
    last1
    形成有效的迭代器范围,并且序列
    [first1,last1)
    根据传递给set_intersection的同一谓词进行排序;如果序列未排序或按其他谓词排序,libstdc++调试模式将检测到错误


operator[]中进行边界检查

你真的能引用它在哪里说的吗?我想它可能建议使用
at
而不是
operator[]
作为
at
operator[]中进行边界检查
没有。你能引用它在哪里说的吗?我想它可能建议使用
at
而不是
operator[]
因为
at
operator[]进行边界检查
没有。我在一些地方读过通过定义_GLIBCXX_DEBUG启用的
,但这到底意味着什么?我是否通过命令行将
-D_GLIBCXX_DEBUG
传递给编译器?@shuhalo-yup!-我在一些地方读过通过定义_GLIBCXX_DEBUG
启用的
,但这到底意味着什么?我知道吗s
-D_GLIBCXX_DEBUG
通过命令行发送到编译器?@shuhalo-yup-