捕获异常后循环中断

问题描述 投票:0回答:1

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。

c++ vector try-catch
1个回答
0
投票

vec.size()
返回 unsigned 整数类型(通常为
std::size_t
)。您试图将 signed 整数与 unsigned 整数进行比较,因此编译器必须将
i
的值转换为无符号类型,然后再与
size()
的值进行比较。
-1
转换为非常大的无符号值,该值大于
size()
的值,因此循环将立即退出,而不会进入其主体。

© www.soinside.com 2019 - 2024. All rights reserved.