不会抛出STL异常Visual Studio 2015社区版

时间:2018-05-05 14:36:31

标签: c++ visual-studio exception

此代码应该通过弹出对话框将“向量下标超出范围”异常抛出。 但绝对没有任何反应。

div.server-status span.counter

我尝试通过std::vector<int> x; for (int i = 0; i < 4; ++i) x.pop_back(); 启用C ++异常,但它没有帮助......

什么可能导致这个?

为什么在Visual Studio 2015中禁用了异常?

修改: 我的问题仍然相同,但对于这段代码:

Debug->Windows->Exception Settings

编辑2 完整代码:

std::vector<int> x;
std::cout << x.at(3) << '\n';

没有抛出任何东西,但是reference说它应该抛出

3 个答案:

答案 0 :(得分:2)

为什么pop_back必须抛出异常?

  

未定义在空容器上调用pop_back。

所以它是未定义的行为。当然不用扔。

答案 1 :(得分:0)

C++ fast 需要付出代价,这意味着不能在运行时检查所有内容。特别是在循环中,检查每次访问都会减慢速度。

您可以使用库的 debug 版本(如果编译器支持它们),那些应该抱怨访问不良。否则,一些编译器支持内存检查标志,以便在编译时检测越界访问。

您可以(我建议应该)使用assert()(或类似)来检查边界,这只会检查调试版本并且在发布版本中的成本为零。

答案 2 :(得分:0)

项目正在使用不同的运行时库进行构建以进行链接。

解决方案: C / C ++ - &gt;代码生成 - &gt;运行时库:已更改为多线程调试(/ MTd)