首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++向量异常处理:抛出out_of_range()的哪种方法更好?为什么?

C++向量异常处理:抛出out_of_range()的哪种方法更好?为什么?
EN

Stack Overflow用户
提问于 2017-02-25 01:28:28
回答 2查看 1.5K关注 0票数 0

我想知道以下哪种方法在发生out_of_range()错误时抛出用户定义的异常是更好的方法。对我来说,作为一个没有经验的人,他们是一样的。但我好奇地想知道这两者之间是否会有什么不同,如果是的话,是什么。

代码语言:javascript
复制
std::vector<int> container {1, 2, 3, 4, 5};

int function1(int x, int y) {

    if(x < 0 || y < 0)
        throw USER_DEFINED_OUT_OF_RANGE();

    if(x >= container.size() || y >= container.size())
        throw USER_DEFINED_OUT_OF_RANGE();

    return container[x] + container[y];

}

int function2(int x, int y) {

    try {
        return container[x] + container[y];
    }
    catch(const std::out_of_range& e) {
        throw USER_DEFINED_OUT_OF_RANGE();
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-25 04:17:50

第一个可以工作,第二个不行,所以第一个更好。

(container[x]是未定义的行为如果x超出范围,它不会抛出。你可以通过使用at()来解决这个问题,就像@NeilButterworth建议的那样。)

但是你忽略了一个更重要的问题--你根本不应该这样做。对于这个上下文,有一个非常好的标准例外,将它转换为其他东西对任何人都没有帮助。

票数 2
EN

Stack Overflow用户

发布于 2017-02-25 01:32:50

如果索引超出范围,向量就会抛出异常。使用:

代码语言:javascript
复制
   container.at(x) + container.at(y)

或者在您的文档中说明使用无效索引的结果是未定义的,并且根本不做任何检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42444768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档