c++ - 当数组超出范围时,通过异常检查是否安全?

标签 c++ arrays c++11 error-handling indexoutofboundsexception

这是我的代码:

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/

相关文章:

c++ - 在构造函数中初始化 Boost shared_ptr

c++ - C++ 中的粗体输出

c++ - 为什么这段代码会泄漏内存? (输出参数和指针)

c++ - 使用 std::enable_if 声明带有可变模板参数的括号运算符

C++模板运算符编译错误

Python: numpy.insert NaN 值

c - C中位数组的结构

php - 通过键合并两个数组

c++ - 部分模板重载

c++ - C++11 中的 3 默认成员弃用规则