C++ 当索引超出范围时,检索方法是否应该引发异常?

C++ 当索引超出范围时,检索方法是否应该引发异常?,c++,exception,error-handling,throw,C++,Exception,Error Handling,Throw,我在两个进程之间使用了一个方法,如果它存在,必须返回一个寄存器值uint32\t,但是如果传递的索引超出范围,我还需要返回一个错误 uint32_t getRegister(uint32_t index) { ... } 我不想将指针作为out参数传递。 那么,我该怎么做呢?我可以抛出异常吗?有更好的解决办法吗 提前谢谢 如果您可以为错误情况0或0xffffffff或类似情况保留返回值,我认为最好抛出异常 我还添加了一个方法来检查索引是否有效,以防一些用户想要对这个库进行无异常编码,

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

uint32_t getRegister(uint32_t index) {

    ...
}
我不想将指针作为out参数传递。 那么,我该怎么做呢?我可以抛出异常吗?有更好的解决办法吗


提前谢谢

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

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

bool isValidRegister(uint32_t index);

与vector的运算符[]和vector::at进行比较。第一个不通过异常,第二个则通过异常。这取决于用户选择哪一个适合她的需要。所以底线是,扔还是不扔取决于你的需要。记住,超出界限需要检查,这可能会减慢你的应用程序。考虑让函数崩溃。如果有人要求一个错误的索引,这是一个需要修复的bug,而不是一个需要捕获的异常。您可以友好地使用assertindex\u\u有效;。