1

我使用 Java 有一段时间了,不得不回到 C++。以前在 C++ 中使用 try/catch 的次数不多,现在再次工作时,我遇到了一个可能很傻的问题。

我有一个未知大小的数组,想找出其中存在的所有数字。但是,我不想使用 C++ 向量,这会给我一个确切的大小。我尝试的是有一个不应该自行结束的 for 循环。我想在抛出异常时打破它,我会捕获并处理问题。但是,它不起作用并且不会引发异常。

任何人都可以启发我吗?:) 谢谢。

    for(int i = 0; i < 1000; i++) {
       try {
           cout << symbols[i] << " ";
       } catch (int ex) {
           cout << "thrown";
           break;
       }
}
4

2 回答 2

6

超出其边界访问数组会产生未定义的行为而不是异常。
未定义的行为意味着程序不再是有效的 C++ 程序,并且可能显示任何行为,无论正确或不正确,但您不能依赖它来保持一致。
您需要自己跟踪大小并使用该大小进行循环,或者根据需要抛出异常。

于 2013-06-08T19:15:20.697 回答
1

未定义的行为意味着任何事情都可能发生。这当然并不意味着“将抛出 X 类型的异常”。您的程序处于未定义状态。即使你能抓住它,你会做什么来解决它?你无能为力,你的程序很糟糕。

于 2013-06-08T19:16:01.370 回答