for 循环在 i=-1 后中断,并且总和为 0。
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> vec{0, 1, 2, 3, 4};
int sum = 0;
for (int i = -1; i < vec.size(); i++) {
try {
throw vec.at(i);
} catch (int x) {
sum += x;
} catch (...) {
cout << "Exception Handled" << endl;
}
}
cout << sum << endl;
return 0;
}
总和应为 10。并且应捕获访问索引 -1。
vec.size()
返回 unsigned 整数类型(通常为 std::size_t
)。您试图将 signed 整数与 unsigned 整数进行比较,因此编译器必须将 i
的值转换为无符号类型,然后再与 size()
的值进行比较。 -1
转换为非常大的无符号值,该值大于 size()
的值,因此循环将立即退出,而不会进入其主体。