断言失败/ STL的异常

时间:2011-06-16 21:01:46

标签: c++ stl standard-library

假设我有一个空列表L.目前如果我运行L.front(),它将快速执行返回垃圾值。是否有一些选项可以打开,执行此操作会抛出异常或导致断言失败?

由于

4 个答案:

答案 0 :(得分:2)

使用empty()检查列表是否为空。 size()在这里并不好,因为它可能具有线性运行时。请参阅Effective STL中的详细信息。 empty()具有恒定的运行时间,这是一种标准方式。

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您使用的是Visual C ++ 2010(可能还有早期版本),则可以使用以下两个宏启用安全SCL和迭代器调试:

#define _SECURE_SCL 1
#define _HAS_ITERATOR_DEBUGGING 1

其他标准库也可能有这个。

编辑:正如所建议的那样,VC2010中有一个宏,即_ITERATOR_DEBUG_LEVEL,其中有3个级别定义如下:

#if _HAS_ITERATOR_DEBUGGING
    #define _ITERATOR_DEBUG_LEVEL 2
#elif _SECURE_SCL
    #define _ITERATOR_DEBUG_LEVEL 1
#else
    #define _ITERATOR_DEBUG_LEVEL 0
#endif

答案 3 :(得分:0)

某些标准库确实提供了这样的选项。您需要查阅特定实现/编译器的文档和/或代码,以确定其特性以及如何启用它。

或者,您可以使用像valgrind或Purify这样的内存检查器,而不是在库级别中执行它。