【问题标题】:can't catch "ctor subscript out of range" exception in visual studio 2012无法在 Visual Studio 2012 中捕获“ctor 下标超出范围”异常
【发布时间】:2025-12-07 23:05:02
【问题描述】:

我正在编写一个在 Visual Studio 2012 中使用向量的程序。这是我的代码有问题的片段:

std::vector< std::vector< std::vector<Eigen::Matrix3d> > > tensor;
//some code
try
    {
        ret = tensor[x][y][z];
    }
    catch(...)
    {
        std::cout << "Index out of range!" << std::endl;
    }

当 x、y 或 z 超出范围时,程序终止而不是处理异常。

这与VS中的某些设置有关吗?

【问题讨论】:

  • 回答书面问题的唯一方法是猜测tensor 是如何定义的。
  • 如何定义无关紧要。问题是关于处理向量抛出的异常。解释 operator [] 不抛出任何异常是我需要的答案。
  • 嗯,很好,但是您的示例代码在任何地方都没有使用“向量”,因此您的程序“使用向量”的断言绝不说明问题所在。这使得这个问题成为一个糟糕的问题,即使有人正确地猜到了你试图问的是什么。
  • 我必须承认你是对的。我会解决的。
  • 我已将反对票改为赞成票。

标签: c++ visual-studio-2012 try-catch subscript


【解决方案1】:

无论使用向量还是数组,使用数组索引运算符[]在索引越界时都不会抛出异常。你得到的只是未定义的行为

如果您想要边界检查,请使用std::vector 及其at 访问函数。

【讨论】: