即使代码在try/catch块中,我仍然会遇到异常

Sha*_*yna 6 c++ exception visual-c++

如果给定的用户输入无效,我写了一些遇到异常的代码,所以我把它放在try/catch块中,但它仍然引发异常.代码本身很长,所以这里是代码的简化版本,也遇到了异常.异常本身很清楚,位置"3"不存在,所以它会抛出一个异常,但它在try/catch块内,所以它应该被捕获,但事实并非如此.

int main() {
    try
    {
        vector<string> test = vector<string>{ "a","b","c" };
        string value = test[3];
    }
    catch (...)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码只会导致以下异常,无论它是否在try/catch块中.

例外

我也试过指定异常(const out_of_range&e),但这也没有帮助.它只是引起了完全相同的异常.

int main() {
    try
    {
        vector<string> test = vector<string>{ "a","b","c" };
        string value = test[3];
    }
    catch (const out_of_range&e)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual Studio,这可能是IDE或它使用的编译器的问题吗?

Jus*_*all 11

如果要std::vector抛出std::out_of_range异常,则需要使用该.at()方法.在operator[]不抛出异常.

例如,您可以执行以下操作:

std::vector<int> myvector(10);
try {
    myvector.at(20)=100;      // vector::at throws an out-of-range
}
catch (const std::out_of_range& e) {
    std::cerr << "Out of Range error: " << e.what() << '\n';
}
Run Code Online (Sandbox Code Playgroud)


Zan*_*ynx 8

这不是一个例外.这是一个调试断言失败.

如果需要异常,则需要在(索引)函数中使用向量而不是数组下标运算符.