这是我的代码:
template<class T>
void Matrix<T>::set(const int i, const int j, const T v) {
try {
m[i][j] = v;
} catch (std::exception& e) {
std::cout << "Standard exception: " << e.what() << std::endl;
}
}
但是,我在这里安全吗?我的意思是,i
和/或 j
可能超出范围,但程序接收到段错误,然后会抛出异常吗?
如果这不是一个好方法,那么我应该使用 assert()
吗?
最佳答案
只需添加边界检查。
C++ 不对数组进行边界检查,更不用说抛出异常了。
借助 vectors/std::array,您可以使用 .at()
方法代替 []
运算符进行检查。
最后,GSL 引入了array_view
,它允许您添加“零成本注释”,以便分析工具可以进行边界检查。目前还没有出现 GSL 的实际标准实现。另见:
关于c++ - 当数组超出范围时,通过异常检查是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180698/