【问题标题】:Should a retrieval method throw an exception when the index is out of range?当索引超出范围时,检索方法是否应该抛出异常?
【发布时间】:2014-10-01 21:15:01
【问题描述】:

我有一个在两个进程之间使用的方法,如果它存在,它必须返回一个寄存器值 (uint32_t),但如果传递的索引超出范围,我还需要返回一个错误。

uint32_t getRegister(uint32_t index) {

    ...
}

我不想将指针作为输出参数传递。 那么,我该怎么做呢?我可以抛出异常吗?有没有更好的解决方案?

提前致谢!

【问题讨论】:

  • vectoroperator[]vector::at() 比较。第一个没有通过第二个例外。用户可以根据自己的需要选择哪一种。所以底线,投掷或不投掷取决于您的需求。还要记住,越界需要检查,这可能会减慢您的应用程序。
  • 考虑让函数崩溃。如果有人要求错误的索引,那是需要修复的错误,而不是需要捕获的异常。你可以很好地使用assert(index_is_valid);

标签: c++ exception error-handling throw


【解决方案1】:

如果您可以为错误情况 0 或 0xffffffff 或类似情况保留返回值,我认为最好抛出异常。

我还会添加一个方法来检查索引是否有效,以防某些用户想要对这个库进行无异常编码,他会知道有一个有效的寄存器可用。比如:

bool isValidRegister(uint32_t index);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多